From 91f5cf28f64aa9c990738398dd62f253647a3639 Mon Sep 17 00:00:00 2001
From: hongji.li <hongji.a.li@capgemini.com>
Date: 星期四, 21 九月 2023 10:25:00 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lhj

---
 LibMacroPlanner/BL/Type_Scenario/Method_CanSelect.qbl                                                                                              |    3 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl                                                                                    |    8 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl                                                                                       |   47 
 _Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl                                                                                       |   30 
 _Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def                                                       |   41 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def                                                                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def                                                       |   65 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyCoefficient#428.def                                 |   23 
 _Main/UI/MacroPlannerWebApp/Views/OrderLock.vw                                                                                                     |  351 ++
 _Main/BL/Type_MappingVersionControl/Attribute_Qty.qbl                                                                                              |    8 
 _Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl                                                          |   23 
 _Main/BL/Type_VersionControl/Attribute_Notes.qbl                                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def                                            |   10 
 _Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl                                                                                         |   10 
 _Main/BL/Relations/Relation_PriorityFactor_MacroPlan_MacroPlan_PriorityFactor.qbl                                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def                                               |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def                                         |    4 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl                                                                                 |    8 
 _Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def                                                              |   55 
 _Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl                                                                              |    8 
 _Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl                                                                                      |   18 
 _Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl                                                                                |   20 
 _Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl                                                                                        |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def                                |   30 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def                                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def                                          |   25 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl                                                                                   |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def                                                    |   46 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl                                                                                    |    8 
 _Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl                                                        |   21 
 _Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def                                                   |   10 
 _Main/BL/Relations/Relation_PriorityPolicy_MacroPlan_MacroPlan_PriorityPolicy.qbl                                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def                                                              |   41 
 _Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl                                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def                                                    |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/_ROOT_Component_FormFillingSchemeDetail#802.def                                  |    4 
 _Main/BL/Type_MappingVersionControl/Attribute_VersionID.qbl                                                                                        |    9 
 LibMacroPlanner/BL/Type_Scenario/Attribute_IsReleased.qbl                                                                                          |    9 
 _Main/BL/Type_CustomerAndForecastOrder/Attribute_SalesSegmentName.qbl                                                                              |    7 
 _Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl                                                                                               |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl                                                                               |    8 
 _Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl                                                                                                 |    8 
 _Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl                                                                                     |   47 
 _Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl                                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/_ROOT_Component_DialogNewPriorityPolicy.def                                          |   32 
 _Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl                                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def                                             |   13 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated.def           |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyOperation.def                                       |  102 
 _Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl                                                                                           |    8 
 _Main/BL/Type_VersionControl/Attribute_User.qbl                                                                                                    |    8 
 _Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def                                                              |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Component_Menurelease.def                                                                  |   12 
 _Main/BL/Type_MappingVersionControl/Attribute_EndTime.qbl                                                                                          |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning#1.def                                         |   57 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def                                                    |   20 
 _Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl                                                                                                 |    7 
 _Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl                                                                       |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_pnlActions_btnOk_OnClick.def                                               |   22 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl                                                                                    |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl                                                                                   |    8 
 _Main/BL/Type_CustomerAndForecastOrder/DefaultValue_StockingPointID.qbl                                                                            |    6 
 _Main/BL/Type_PriorityPolicy/Attribute_Name.qbl                                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_pnlActions.def                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def                                                        |   15 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl                                                                                    |    8 
 _Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl                                                                                      |   15 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl                                                                              |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEdit_OnClick.def                                          |   20 
 _Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl                                                                                 |    6 
 _Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl                                                                                               |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl                                                                                            |    6 
 _Main/BL/Type_MappingVersionControl/_ROOT_Type_MappingVersionControl.qbl                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def                                        |   28 
 _Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl                                                                             |    2 
 _Main/UI/MacroPlannerWebApp/Views/PriorityPolicy.vw                                                                                                | 2258 ++++++++++++++
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl                                              |    9 
 _Main/BL/Type_Scenario/Method_SetReleased.qbl                                                                                                      |    5 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listActionBarPagePriorityFactorGrading.def                               |   10 
 _Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl                                                                                 |   19 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnCancel_OnClick.def                                                |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def                                                                   |   16 
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl                                                                  |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl                                                                                       |    8 
 _Main/BL/Type_Scenario/Attribute_VersionID.qbl                                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/_ROOT_Component_DialogEditPriorityFactor.def                                        |   32 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl                                                                     |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlContent_dsForecastDemandDate_OnCreated.def                      |   16 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl                                                                               |    8 
 _Main/BL/Type_VersionControl/Attribute_IsReleased.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listActionBarPagePriorityFactor.def                                             |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock#1.def                                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning#679.def                                                  |  210 +
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def                                                           |   17 
 _Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def                                                                    |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def                            |   17 
 _Main/BL/Type_MappingVersionControl/Attribute_VersionName.qbl                                                                                      |    8 
 _Main/BL/Type_OrderLockLog/Attribute_Price.qbl                                                                                                     |    7 
 _Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl                                                                                             |    8 
 _Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionC.qbl                                                |   23 
 _Main/BL/Type_MappingVersionControl/Attribute_DataFrom.qbl                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def                                      |   28 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def                                                                      |   10 
 _Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl                                                                              |   22 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def                                               |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEdit_OnClick.def                            |   20 
 _Main/BL/Type_MappingVersionControl/Attribute_User.qbl                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def               |   51 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCopyScenario_OnClick.def                                       |   12 
 LibMacroPlanner/BL/Type_Scenario/Method_SetReleased.qbl                                                                                            |   12 
 _Main/BL/Type_PriorityFactorDetails/StaticMethod_CreateTestData.qbl                                                                                |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def                                                 |   10 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def                                          |   17 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def                                    |   24 
 _Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl                                                                      |   23 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl                                                                                       |    6 
 _Main/BL/Type_MappingVersionControl/TypeIndex_TypeIndexVersionControl.qbl                                                                          |   28 
 _Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl                                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def                                                        |   82 
 _Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl                                                                                |   18 
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl                                                          |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def                                       |   17 
 .gitignore                                                                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario#549.def                                                          |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def                  |   23 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl                                                                                 |    8 
 _Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def                                                         |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def                                        |   19 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl                                                                               |   62 
 _Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl                                                                               |    6 
 _Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl                                                                              |    0 
 _Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl                                                                                          |   59 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl                                                                                     |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario.def                                                              |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Component_pnlContent.def                                                             |   36 
 _Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl                                                                                           |   10 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl                                                                               |    8 
 _Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl                                                                             |   11 
 _Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl                                                        |   23 
 _Main/BL/Type_OrderLockLog/Attribute_CustomerName#23.qbl                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def                                                               |  114 
 _Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl                                                                                  |   17 
 _Main/UI/MacroPlannerWebApp/Views/填产方案列表.vw                                                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def                                                  |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def                            |   58 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl                                                                                               |   50 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl                                                                                  |   32 
 _Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl                                                                 |    2 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl                                                                                 |   21 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl                                                                                |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_ListFillingSchemeDetail.def                                            |   10 
 _Main/BL/Type_MappingVersionControl/Attribute_StartTime.qbl                                                                                        |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def                                       |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def                                                          |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def                                                 |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def                                 |   24 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl                                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listContextMenuPriorityPolicy.def                                               |   46 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock#1.def                                                       |   10 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl                                                                                    |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl                                                                              |    8 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl                                                                                   |   15 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl                                                                             |   19 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl                                                                                 |   50 
 _Main/BL/Type_VersionControl/Attribute_BusinessType.qbl                                                                                            |    8 
 _Main/BL/Type_MappingVersionControl/Attribute_StockingPointID.qbl                                                                                  |    9 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl                                                                 |    6 
 _Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def                                                     |   93 
 _Main/BL/InfoMessages.qbl                                                                                                                          |   10 
 _Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def                                                             |   14 
 _Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl                                                                                            |    6 
 _Main/BL/Type_PriorityFactor/Attribute_coefficient.qbl                                                                                             |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listActionBarPagePriorityPolicy.def                                             |   10 
 _Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl                                                                                      |   16 
 _Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl                                                                                           |    6 
 _Main/BL/Type_MappingVersionControl/Attribute_ProductID.qbl                                                                                        |    9 
 _Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl                                                                                    |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsForecastDemandDate_OnCreated.def                            |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlActions.def                                                            |   40 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def                                                      |   15 
 _Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl                                                |    2 
 _Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl                                                                                                   |    7 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl                                                                                  |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl                                                                                 |    6 
 _Main/BL/Type_VersionStatus/Attribute_Notes.qbl                                                                                                    |    8 
 _var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties                                                                      |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl                                                                                    |    8 
 _Main/BL/Type_VersionControl/Attribute_VersionID.qbl                                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def                |   21 
 _Main/BL/Type_OrderLockLog/Attribute_End.qbl                                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listContextMenuFillingSchemeDetail.def                                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def                |   69 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl                                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlActions.def                                                     |   40 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick.def                                                   |   19 
 _Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl                                                                        |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl                                                                                |    8 
 _Main/BL/Type_MappingVersionControl/Attribute_DataTo.qbl                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCr.def |   16 
 _Main/BL/Type_MappingVersionControl/Attribute_CreateTime.qbl                                                                                       |    8 
 _Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def                                            |   11 
 _Main/BL/EDI/Broker_Broker_OTD_VersionControlToDB.qbl                                                                                              |  133 
 LibMacroPlanner/BL/Type_ScenarioMP/Method_SetReleased.qbl                                                                                          |    6 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl                                                                                 |   15 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl                                                                                      |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def                                                    |   16 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Response_pnlActions_btnCancel_OnClick.def                                            |   15 
 _Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl                                                                                    |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/_ROOT_Component_FormPriorityPolicyOperation.def                                  |   90 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def                                                              |    1 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl                                                                               |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl                                                                                        |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnCancel_OnClick.def                                    |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnOk_OnClick.def                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Component_pnlActions.def                                                             |   40 
 _Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnCancel_OnClick.def                                           |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def                       |   49 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnCancel_OnClick.def                                           |    2 
 _Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def                                                                 |   52 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/_ROOT_Component_DialogCreateEditScenario.def                                        |    1 
 _Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl                                                                                       |    8 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl                                                          |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl                                                                               |    8 
 _Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl                                                                                          |    7 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl                                                                                       |   41 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl                                                                                 |    8 
 _Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl                                                                                 |   64 
 _Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl                                                                                          |    7 
 _Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl                                                                                                  |  133 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def                                                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def                                                                |   25 
 _Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl                                                                                  |   38 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl                                                                                 |   71 
 _Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl                                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def                                                                 |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock#844.def                                                                |   42 
 LibMacroPlanner/BL/InfoMessages.qbl                                                                                                                |    4 
 _Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl                                                                 |   11 
 _Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl                                                                                      |   18 
 _Main/BL/Type_OrderLockLog/Attribute_IsFirmed#2.qbl                                                                                                |    7 
 _Main/BL/Type_Scenario/Attribute_IsCreateNewVersion.qbl                                                                                            |    8 
 _Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl                                                                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlContent.def                                                            |   48 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl                                                                                     |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def                                  |   34 
 _Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl                                                                                             |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_New.def                                                                       |   18 
 _Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def                   |   52 
 _Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl                                                                                           |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl                                                                                         |    6 
 _Main/BL/Type_Scenario/DefaultValue_VersionID.qbl                                                                                                  |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def                                                          |   59 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def                                            |   59 
 _Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlContent_dsOrderDate_OnCreated.def                                    |   16 
 _Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl                                                                                             |    6 
 _Main/BL/Type_VersionControl/StaticMethod_ReleaseLatestVersion.qbl                                                                                 |   10 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl                                                                                |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl                                                                                     |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader#545.def                                                         |  125 
 _Main/BL/Type_VersionControl/Attribute_CreateTime.qbl                                                                                              |    8 
 _Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl                                                                       |   16 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl                                                                                    |    8 
 _Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl                                                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def                                                    |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormHistoricalFillingCapacityOrder/_ROOT_Component_FormHistoricalFillingCapacityOrder.def                    |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl                                                                              |    8 
 _Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl                                                                                                   |    7 
 _Main/BL/Type_VersionStatusDetail/Attribute_User.qbl                                                                                               |    8 
 _Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl                                                                                |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def                   |   21 
 _Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl                                                |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def                                     |   17 
 _Main/BL/Type_VersionControl/StaticMethod_Create.qbl                                                                                               |   29 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def               |   51 
 _Main/BL/Type_CustomerAndForecastOrder/Attribute_StockingPointID.qbl                                                                               |    7 
 _Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl                                                                                           |    7 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning#1.def                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def                                          |   10 
 _Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw                                                                                                  |  351 ++
 _Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral#549.def                                                      |   11 
 _Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix#780.def                                                                  |   24 
 _Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl                                                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsDemandDate_OnCreated.def                                    |   16 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listActionBarPageFillingSchemeDetail.def                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def                                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Method_New.def                                                                   |    1 
 _Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl                                                                                            |    7 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl                                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def                                |   43 
 _Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl                                                                                            |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl                                                                                    |    8 
 _Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl                                                                                                 |    7 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl                                                                                 |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl                                                                                  |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def                            |   19 
 _Main/BL/Type_MappingVersionControl/Attribute_ReleaseTime.qbl                                                                                      |    8 
 _Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick#623.def                                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInitData_OnClick.def                                      |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def                                |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuNew_OnClick.def                                           |   19 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Response_pnlActions_btnOk_OnClick.def                                                |   15 
 _Main/BL/Type_MPSync/StaticMethod_TestData.qbl                                                                                                     |   43 
 _Main/BL/Type_VersionControl/Attribute_CalType.qbl                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def                          |   32 
 _Main/BL/Type_PriorityPolicy/_ROOT_Type_PriorityPolicy.qbl                                                                                         |   10 
 /dev/null                                                                                                                                          |   11 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl                                                                               |    8 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl                                                                               |   19 
 _Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_Edit.def                                                                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def                                         |   17 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl                                                                                    |   22 
 _Main/BL/Type_VersionStatus/Attribute_LastUser.qbl                                                                                                 |    8 
 344 files changed, 9,001 insertions(+), 205 deletions(-)

diff --git a/.gitignore b/.gitignore
index 00e3f69..6868dd4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,5 @@
 **/LibUserSettings/**
 
 /.idea
+_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
+*.properties
diff --git a/LibMacroPlanner/BL/InfoMessages.qbl b/LibMacroPlanner/BL/InfoMessages.qbl
index 05bad47..cfaabd1 100644
--- a/LibMacroPlanner/BL/InfoMessages.qbl
+++ b/LibMacroPlanner/BL/InfoMessages.qbl
@@ -529,6 +529,10 @@
   {
     DefaultText: 'Revert'
   }
+  InfoMessage Scenario_General_IsReleased
+  {
+    DefaultText: 'Not allowed on a released scenario'
+  }
   InfoMessage Strategy_CampaignOptimizer_DisableTooltip
   {
     DefaultText: 'When disabled, the optimizer is only allowed to replan the quantities of the campaigns based on the constraints of the campaigns created manually.'
diff --git a/LibMacroPlanner/BL/Type_Scenario/Attribute_IsReleased.qbl b/LibMacroPlanner/BL/Type_Scenario/Attribute_IsReleased.qbl
new file mode 100644
index 0000000..37963e6
--- /dev/null
+++ b/LibMacroPlanner/BL/Type_Scenario/Attribute_IsReleased.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsReleased
+{
+  #keys: '3[412960.0.172790038][412960.0.172790037][412960.0.172790039]'
+  Description: '璇ョ増鏈槸鍚﹀凡鍙戝竷'
+  ValueType: Boolean
+  InterfaceProperties { Accessibility: 'Module' }
+}
diff --git a/LibMacroPlanner/BL/Type_Scenario/Method_CanSelect.qbl b/LibMacroPlanner/BL/Type_Scenario/Method_CanSelect.qbl
index ee79d24..072d7c9 100644
--- a/LibMacroPlanner/BL/Type_Scenario/Method_CanSelect.qbl
+++ b/LibMacroPlanner/BL/Type_Scenario/Method_CanSelect.qbl
@@ -32,6 +32,9 @@
     {
       feedback_o := Translations::Scenario_General_IsDeleted();
     }
+    else if( this.IsReleased() ){
+      feedback_o := Translations::Scenario_General_IsReleased();
+      }
     
     return feedback_o = '';
   *]
diff --git a/LibMacroPlanner/BL/Type_Scenario/Method_SetReleased.qbl b/LibMacroPlanner/BL/Type_Scenario/Method_SetReleased.qbl
new file mode 100644
index 0000000..c30613e
--- /dev/null
+++ b/LibMacroPlanner/BL/Type_Scenario/Method_SetReleased.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetReleased
+{
+  Description: '璁剧疆鏌愬満鏅殑鍙戝竷鐘舵��'
+  IsAbstract: true
+  TextBody:
+  [*
+    // Administrator Sep-15-2023 (created)
+    this.IsReleased( true );
+  *]
+}
diff --git a/LibMacroPlanner/BL/Type_ScenarioMP/Method_SetReleased.qbl b/LibMacroPlanner/BL/Type_ScenarioMP/Method_SetReleased.qbl
new file mode 100644
index 0000000..b84962e
--- /dev/null
+++ b/LibMacroPlanner/BL/Type_ScenarioMP/Method_SetReleased.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+MethodOverride SetReleased
+{
+  TextBody: 'this.IsReleased( true );'
+}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl b/_Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl
new file mode 100644
index 0000000..b3723db
--- /dev/null
+++ b/_Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl
@@ -0,0 +1,133 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker Broker_OTD_VersionControl
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Destination MappingVersionControl
+  {
+    EDIMLTable MappingVersionControl
+    {
+      PrimaryKeyColumns: EndTime
+      PrimaryKeyColumns: ProductID
+      PrimaryKeyColumns: StartTime
+      PrimaryKeyColumns: StockingPointID
+      PrimaryKeyColumns: VersionID
+      TargetType: MappingVersionControl
+      TypeIndex: TypeIndexVersionControl
+      EDIMLColumn CreateTime { Attribute: CreateTime ValueType: DateTime }
+      EDIMLColumn DataFrom { Attribute: DataFrom ValueType: String }
+      EDIMLColumn DataTo { Attribute: DataTo ValueType: String }
+      EDIMLColumn EndTime { Attribute: EndTime ValueType: DateTime }
+      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
+      EDIMLColumn Qty { Attribute: Qty ValueType: Real }
+      EDIMLColumn ReleaseTime { Attribute: ReleaseTime ValueType: DateTime }
+      EDIMLColumn StartTime { Attribute: StartTime ValueType: DateTime }
+      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
+      EDIMLColumn User { Attribute: User ValueType: String }
+      EDIMLColumn VersionID { Attribute: VersionID ValueType: String }
+      EDIMLColumn VersionName { Attribute: VersionName ValueType: String }
+    }
+  }
+  EDIODBCLink.Source MID_VERSIONCONTROL
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle'
+    EDIODBCLinkTable MID_VERSIONCONTROL
+    {
+      OthersMayCreateTable: true
+      OthersMayDeleteRow: true
+      OthersMayDropTable: true
+      OthersMayFlushTable: true
+      OthersMayInsertRow: true
+      Parameters: '/owner="TIANMA"'
+      PrimaryKeyColumns: ENDTIME
+      PrimaryKeyColumns: ID
+      PrimaryKeyColumns: PRODUCTID
+      PrimaryKeyColumns: STARTTIME
+      PrimaryKeyColumns: STOCKINGPOINTID
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn CREATETIME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn DATAFROM
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn DATATO
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ENDTIME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn ID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn NAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PRODUCTID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn QTY
+      {
+        OthersMayUpdateColumn: true
+        ValueType: Real
+      }
+      EDIODBCLinkColumn RELEASETIME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn STARTTIME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn STOCKINGPOINTID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn USER
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation TransformationVersionControl
+  {
+    EDITableTransformation
+    {
+      InputTable: MID_VERSIONCONTROL
+      OutputTable: MappingVersionControl
+      EDIColumnMatch { InputColumn: CREATETIME OutputColumn: CreateTime }
+      EDIColumnMatch { InputColumn: DATAFROM OutputColumn: DataFrom }
+      EDIColumnMatch { InputColumn: DATATO OutputColumn: DataTo }
+      EDIColumnMatch { InputColumn: ENDTIME OutputColumn: EndTime }
+      EDIColumnMatch { InputColumn: ID OutputColumn: VersionID }
+      EDIColumnMatch { InputColumn: NAME OutputColumn: VersionName }
+      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
+      EDIColumnMatch { InputColumn: QTY OutputColumn: Qty }
+      EDIColumnMatch { InputColumn: RELEASETIME OutputColumn: ReleaseTime }
+      EDIColumnMatch { InputColumn: STARTTIME OutputColumn: StartTime }
+      EDIColumnMatch { InputColumn: STOCKINGPOINTID OutputColumn: StockingPointID }
+      EDIColumnMatch { InputColumn: USER OutputColumn: User }
+    }
+  }
+}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_VersionControlToDB.qbl b/_Main/BL/EDI/Broker_Broker_OTD_VersionControlToDB.qbl
new file mode 100644
index 0000000..f767cde
--- /dev/null
+++ b/_Main/BL/EDI/Broker_Broker_OTD_VersionControlToDB.qbl
@@ -0,0 +1,133 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker Broker_OTD_VersionControlToDB
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Source MappingVersionControlToDB
+  {
+    EDIMLTable MappingVersionControl
+    {
+      PrimaryKeyColumns: EndTime
+      PrimaryKeyColumns: ProductID
+      PrimaryKeyColumns: StartTime
+      PrimaryKeyColumns: StockingPointID
+      PrimaryKeyColumns: VersionID
+      TargetType: MappingVersionControl
+      TypeIndex: TypeIndexVersionControl
+      EDIMLColumn CreateTime { Attribute: CreateTime ValueType: DateTime }
+      EDIMLColumn DataFrom { Attribute: DataFrom ValueType: String }
+      EDIMLColumn DataTo { Attribute: DataTo ValueType: String }
+      EDIMLColumn EndTime { Attribute: EndTime ValueType: DateTime }
+      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
+      EDIMLColumn Qty { Attribute: Qty ValueType: Real }
+      EDIMLColumn ReleaseTime { Attribute: ReleaseTime ValueType: DateTime }
+      EDIMLColumn StartTime { Attribute: StartTime ValueType: DateTime }
+      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
+      EDIMLColumn User { Attribute: User ValueType: String }
+      EDIMLColumn VersionID { Attribute: VersionID ValueType: String }
+      EDIMLColumn VersionName { Attribute: VersionName ValueType: String }
+    }
+  }
+  EDIODBCLink.Destination MID_VERSIONCONTROLTODB
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle'
+    EDIODBCLinkTable MID_VERSIONCONTROL
+    {
+      MayCreateTable: true
+      MayDeleteRow: true
+      MayDropTable: true
+      MayFlushTable: true
+      MayInsertRow: true
+      Parameters: '/owner="TIANMA"'
+      PrimaryKeyColumns: ENDTIME
+      PrimaryKeyColumns: ID
+      PrimaryKeyColumns: PRODUCTID
+      PrimaryKeyColumns: STARTTIME
+      PrimaryKeyColumns: STOCKINGPOINTID
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn CREATETIME
+      {
+        MayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn DATAFROM
+      {
+        MayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn DATATO
+      {
+        MayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ENDTIME
+      {
+        MayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn ID
+      {
+        MayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn NAME
+      {
+        MayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PRODUCTID
+      {
+        MayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn QTY
+      {
+        MayUpdateColumn: true
+        ValueType: Real
+      }
+      EDIODBCLinkColumn RELEASETIME
+      {
+        MayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn STARTTIME
+      {
+        MayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn STOCKINGPOINTID
+      {
+        MayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn USER
+      {
+        MayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation TransformationVersionControlToDB
+  {
+    EDITableTransformation
+    {
+      InputTable: MappingVersionControl
+      OutputTable: MID_VERSIONCONTROL
+      EDIColumnMatch { InputColumn: CreateTime OutputColumn: CREATETIME }
+      EDIColumnMatch { InputColumn: DataFrom OutputColumn: DATAFROM }
+      EDIColumnMatch { InputColumn: DataTo OutputColumn: DATATO }
+      EDIColumnMatch { InputColumn: EndTime OutputColumn: ENDTIME }
+      EDIColumnMatch { InputColumn: ProductID OutputColumn: PRODUCTID }
+      EDIColumnMatch { InputColumn: Qty OutputColumn: QTY }
+      EDIColumnMatch { InputColumn: ReleaseTime OutputColumn: RELEASETIME }
+      EDIColumnMatch { InputColumn: StartTime OutputColumn: STARTTIME }
+      EDIColumnMatch { InputColumn: StockingPointID OutputColumn: STOCKINGPOINTID }
+      EDIColumnMatch { InputColumn: User OutputColumn: USER }
+      EDIColumnMatch { InputColumn: VersionID OutputColumn: ID }
+      EDIColumnMatch { InputColumn: VersionName OutputColumn: NAME }
+    }
+  }
+}
diff --git a/_Main/BL/InfoMessages.qbl b/_Main/BL/InfoMessages.qbl
index d3fc0df..952d7d5 100644
--- a/_Main/BL/InfoMessages.qbl
+++ b/_Main/BL/InfoMessages.qbl
@@ -2,4 +2,12 @@
 #parent: #root
 InfoMessages id:#InfoMessages #extension
 {
-}
+  InfoMessage FilllingCapacity_NotRelease
+  {
+    DefaultText: 'other scheme is already released.'
+  }
+  InfoMessage FilllingCapacity_ValidateInput
+  {
+    DefaultText: 'Please input validate value !'
+  }
+}
\ No newline at end of file
diff --git a/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionC.qbl b/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionC.qbl
new file mode 100644
index 0000000..39dd1eb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionC.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionControl
+{
+  #keys: '1[412960.0.150120043]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.150120045][412960.0.150120044][412960.0.150120046]'
+    Cardinality: '0to1'
+    ObjectDefinition: MappingVersionControl
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MappingVersionControl
+  {
+    #keys: '3[412960.0.150120048][412960.0.150120047][412960.0.150120049]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl b/_Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl
new file mode 100644
index 0000000..cb254ef
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OrderLockLog_MacroPlan_MacroPlan_OrderLockLog.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OrderLockLog_MacroPlan_MacroPlan_OrderLockLog
+{
+  #keys: '1[412960.0.217504333]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[412960.0.217504335][412960.0.217504334][412960.0.217504336]'
+    Cardinality: '0to1'
+    ObjectDefinition: OrderLockLog
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OrderLockLog
+  {
+    #keys: '3[412960.0.217504338][412960.0.217504337][412960.0.217504339]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityFactorDetails_GlobalOTDTable_GlobalOTDTable_PriorityFactorD.qbl b/_Main/BL/Relations/Relation_PriorityFactorDetails_GlobalOTDTable_GlobalOTDTable_PriorityFactorD.qbl
deleted file mode 100644
index 81e03b6..0000000
--- a/_Main/BL/Relations/Relation_PriorityFactorDetails_GlobalOTDTable_GlobalOTDTable_PriorityFactorD.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation PriorityFactorDetails_GlobalOTDTable_GlobalOTDTable_PriorityFactorDetails
-{
-  #keys: '1[414382.0.444830151]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414382.0.444830153][414382.0.444830152][414382.0.444830154]'
-    Cardinality: '0to1'
-    ObjectDefinition: PriorityFactorDetails
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide PriorityFactorDetails
-  {
-    #keys: '3[414382.0.444830156][414382.0.444830155][414382.0.444830157]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl b/_Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl
index ded778d..f58818b 100644
--- a/_Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl
+++ b/_Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl
@@ -18,6 +18,6 @@
     #keys: '3[414382.0.444850087][414382.0.444850086][414382.0.444850088]'
     Cardinality: '1toN'
     ObjectDefinition: PriorityFactor
-    OwningSide: 'Reference'
+    OwningSide: 'Owned'
   }
 }
diff --git a/_Main/BL/Relations/Relation_PriorityFactor_GlobalOTDTable_GlobalOTDTable_PriorityFactor.qbl b/_Main/BL/Relations/Relation_PriorityFactor_GlobalOTDTable_GlobalOTDTable_PriorityFactor.qbl
deleted file mode 100644
index 14911e1..0000000
--- a/_Main/BL/Relations/Relation_PriorityFactor_GlobalOTDTable_GlobalOTDTable_PriorityFactor.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation PriorityFactor_GlobalOTDTable_GlobalOTDTable_PriorityFactor
-{
-  #keys: '1[414382.0.444830037]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414382.0.444830039][414382.0.444830038][414382.0.444830040]'
-    Cardinality: '0to1'
-    ObjectDefinition: PriorityFactor
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide PriorityFactor
-  {
-    #keys: '3[414382.0.444830042][414382.0.444830041][414382.0.444830043]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_PriorityFactor_MacroPlan_MacroPlan_PriorityFactor.qbl b/_Main/BL/Relations/Relation_PriorityFactor_MacroPlan_MacroPlan_PriorityFactor.qbl
new file mode 100644
index 0000000..dd6e961
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityFactor_MacroPlan_MacroPlan_PriorityFactor.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityFactor_MacroPlan_MacroPlan_PriorityFactor
+{
+  #keys: '1[414382.0.475830114]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414382.0.475830116][414382.0.475830115][414382.0.475830117]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityFactor
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityFactor
+  {
+    #keys: '3[414382.0.475830119][414382.0.475830118][414382.0.475830120]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityPolicy_MacroPlan_MacroPlan_PriorityPolicy.qbl b/_Main/BL/Relations/Relation_PriorityPolicy_MacroPlan_MacroPlan_PriorityPolicy.qbl
new file mode 100644
index 0000000..8f753de
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityPolicy_MacroPlan_MacroPlan_PriorityPolicy.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityPolicy_MacroPlan_MacroPlan_PriorityPolicy
+{
+  #keys: '1[414382.0.488041940]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414382.0.488041942][414382.0.488041941][414382.0.488041943]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityPolicy
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityPolicy
+  {
+    #keys: '3[414382.0.488041945][414382.0.488041944][414382.0.488041946]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl b/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl
new file mode 100644
index 0000000..bb27705
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl
+{
+  #keys: '1[412960.0.134860006]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.134860008][412960.0.134860007][412960.0.134860009]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionControl
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionControl
+  {
+    #keys: '3[412960.0.134860011][412960.0.134860010][412960.0.134860012]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl b/_Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl
new file mode 100644
index 0000000..41e591c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail
+{
+  #keys: '1[412960.0.143214355]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide VersionStatus
+  {
+    #keys: '3[412960.0.143214357][412960.0.143214356][412960.0.143214358]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionStatusDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionStatusDetail
+  {
+    #keys: '3[412960.0.143214360][412960.0.143214359][412960.0.143214361]'
+    Cardinality: '1toN'
+    ObjectDefinition: VersionStatus
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl b/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl
new file mode 100644
index 0000000..effee95
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus
+{
+  #keys: '1[412960.0.134830056]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.134830058][412960.0.134830057][412960.0.134830059]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionStatus
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionStatus
+  {
+    #keys: '3[412960.0.134830061][412960.0.134830060][412960.0.134830062]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl b/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
index 19c5d54..650ea87 100644
--- a/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
@@ -5,6 +5,6 @@
 {
   #keys: '5[414384.0.810464639][414384.0.810464637][0.0.0][414384.0.810464638][414384.0.810464640]'
   BaseType: Object
-  Description: '浜ч攢棰勭畻'
+  Description: '浜ч攢棰勭畻 锛侊紒锛佸純鐢紒锛侊紒'
   StructuredName: 'CapacityAndSaleBudges'
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl
deleted file mode 100644
index 2acad18..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl
+++ /dev/null
@@ -1,14 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Create (
-  ScenarioManager parent,
-  String timeStringAndScenarioName,
-  String businessTypeOrOrgCode,
-  Real quantity
-)
-{
-  TextBody:
-  [*
-    // yypsybs Sep-20-2023 (created)
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl
index 57beec6..fad5998 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl
@@ -3,6 +3,6 @@
 Attribute PlaceOfProductionOfArray
 {
   #keys: '3[414384.0.850180083][414384.0.850180082][414384.0.850180084]'
-  Description: '缁勭粐缂栫爜'
+  Description: '闈㈡澘鍩哄湴'
   ValueType: String
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl
index a664cdc..1a9a53a 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl
@@ -2,14 +2,17 @@
 #parent: #root
 StaticMethod GetProductCodesByBusinessType (
   CapacityAndSaleBudgeChartRows list,
-  String businessTyoe
+  String businessType
 ) as owning Strings
 {
   TextBody:
   [*
     // yypsybs Sep-20-2023 (created)
-    return selectuniquevalues(  list, Elements, item, 
-                                item.BusinessType() = businessTyoe,
-                                item.BusinessType() );
+    result := construct( Strings );
+    rowList := selectset( list, Elements, item, item.BusinessType() = businessType );
+    traverse( rowList, Elements, row ) {
+      result := result.Union( selectvalues( row, CapacityAndSaleBudgeChartRowProduct, cell, cell.ProductCode() ) ); 
+    }
+    return &result;
   *]
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl
index 109e1d7..7ded1be 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl
@@ -8,8 +8,11 @@
   TextBody:
   [*
     // yypsybs Sep-20-2023 (created)
-    return selectuniquevalues(  list, Elements, item, 
-                                item.PlaceOfProductionOfArray() = placeOfProductionOfArray,
-                                item.PlaceOfProductionOfArray() );
+    result := construct( Strings );
+    rowList := selectset( list, Elements, item, item.PlaceOfProductionOfArray() = placeOfProductionOfArray );
+    traverse( rowList, Elements, row ) {
+      result := result.Union( selectvalues( row, CapacityAndSaleBudgeChartRowProduct, cell, cell.ProductCode() ) ); 
+    }
+    return &result;
   *]
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl
index 8d05fbd..ad1fad0 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl
@@ -10,7 +10,7 @@
     // yypsybs Sep-18-2023 (created)
     value := select( parent, CapacityAndSaleBudgeChartRowProduct, item, item.ProductCode() = productCode );
     if( isnull( value ) ) {
-      parent.CapacityAndSaleBudgeChartRowProduct( relnew, ProductCode := productCode );
+      value := parent.CapacityAndSaleBudgeChartRowProduct( relnew, ProductCode := productCode );
     }
     return value;
   *]
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_OrgCode.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_OrgCode.qbl
deleted file mode 100644
index 3329fb9..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_OrgCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrgCode
-{
-  #keys: '3[414384.0.822962978][414384.0.822962977][414384.0.822962979]'
-  Description: '缁勭粐缂栫爜'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl
new file mode 100644
index 0000000..da79fc6
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlaceOfProductionOfArray
+{
+  #keys: '3[414384.0.864360344][414384.0.864360343][414384.0.864360345]'
+  Description: '闈㈡澘鍩哄湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
index 8d6c215..e155e81 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
@@ -3,15 +3,15 @@
 StaticMethod CreateIfNotExist (
   ScenarioManager scenarioManager,
   String businessType,
-  String orgCode
+  String placeOfProductionOfArray
 ) as CapacityAndSaleBudgeCompareItemRow
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    value := select( scenarioManager, CapacityAndSaleBudgeCompareItemRow, row, row.BusinessType() = businessType and row.OrgCode() = orgCode );
+    value := select( scenarioManager, CapacityAndSaleBudgeCompareItemRow, row, row.BusinessType() = businessType and row.PlaceOfProductionOfArray() = placeOfProductionOfArray );
     if( isnull( value ) ) {
-      value := scenarioManager.CapacityAndSaleBudgeCompareItemRow( relnew, BusinessType := businessType, OrgCode := orgCode );  
+      value := scenarioManager.CapacityAndSaleBudgeCompareItemRow( relnew, BusinessType := businessType, PlaceOfProductionOfArray := placeOfProductionOfArray );  
     } 
     return value;
   *]
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl
index aae08c5..e0c8850 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl
@@ -10,7 +10,7 @@
     // yypsybs Sep-18-2023 (created)
     value := select( parent, CapacityAndSaleBudgeCompareItemRowProduct, item, item.ProductCode() = productCode );
     if( isnull( value ) ) {
-      parent.CapacityAndSaleBudgeCompareItemRowProduct( relnew, ProductCode := productCode );
+      value := parent.CapacityAndSaleBudgeCompareItemRowProduct( relnew, ProductCode := productCode );
     }
     return value;
   *]
diff --git a/_Main/BL/Type_CustomerAndForecastOrder/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..caa0ddb
--- /dev/null
+++ b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414382.0.475811339][414382.0.475811338][414382.0.475811340]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerAndForecastOrder/Attribute_StockingPointID.qbl b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..ce0439b
--- /dev/null
+++ b/_Main/BL/Type_CustomerAndForecastOrder/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414382.0.475811360][414382.0.475811359][414382.0.475811361]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerAndForecastOrder/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_CustomerAndForecastOrder/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..fbb83fc
--- /dev/null
+++ b/_Main/BL/Type_CustomerAndForecastOrder/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl
index 720a7bb..dc39665 100644
--- a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl
+++ b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl
@@ -11,7 +11,7 @@
     
     owner.FillingCapacityOrder(relnew,ProductID := data.ProductID(),BusinessType := data.BusinessType(),Customer := data.Customer(),CustomerID := data.CustomerID(),
                                     Quantity := data.Quantity(),UnitOfMeasureName := data.UnitOfMeasureName(),PanelBigSheetQuantity := data.PanelBigSheetQuantity(),SalesAmount := data.SalesAmount(),
-                                    ForecastDemandDate := data.ForecastDemandDate(),DemandDate := data.DemandDate(),VerNo := data.VerNo()
+                                    ForecastDemandDate := data.ForecastDemandDate(),DemandDate := data.DemandDate(),VerNo := data.VerNo(),SalesSegmentName := data.SalesSegmentName()
                                     );
   *]
 }
diff --git a/_Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl b/_Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl
new file mode 100644
index 0000000..14a756a
--- /dev/null
+++ b/_Main/BL/Type_CustomerOrder/Attribute_LastModify.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModify
+{
+  #keys: '3[412960.0.217504307][412960.0.217504306][412960.0.217504308]'
+  Description: '鏈�鍚庝慨鏀逛汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl b/_Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl
new file mode 100644
index 0000000..530eb19
--- /dev/null
+++ b/_Main/BL/Type_CustomerOrder/Attribute_LastModifyTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModifyTime
+{
+  #keys: '3[412960.0.217504317][412960.0.217504316][412960.0.217504318]'
+  Description: '鏈�鍚庢搷浣滄椂闂�'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
index 48ac995..468a85c 100644
--- a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
+++ b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
@@ -38,11 +38,32 @@
     filllingCapacityOrderScheme := owner.FilllingCapacityOrderScheme(relnew,SchemeName := schemeName,SchemeDate := schemeDate,BusinessType := businessType,Customer := customer,CustomerID := customerID,
                                                                       SalesSegmentName := salesSegmentName);
     
+    
     traverse( fillingCapacityOrders,Elements,e)
     {
       e.SchemeName(schemeName);
       e.IsFilling(true);
       filllingCapacityOrderScheme.FillingCapacityOrder(relinsert, e);
     }
+    
+    // 鐗堟湰鍙�
+    verNoOrder := select( filllingCapacityOrderScheme,FillingCapacityOrder,o,
+                                 o.VerNo() <> ''
+                                 )
+    
+    // 闇�瑕佸皢閿�鍞鍗曞拰棰勫敭璁㈠崟鍚屾椂淇濆瓨鍒版柟妗堜腑
+    traverse( owner,CustomerAndForecastOrder,order)
+    {
+      
+         fillingOrder := owner.FillingCapacityOrder(relnew,BusinessType := order.BusinessType(),Customer := order.Customer(),CustomerID := order.CustomerID(),
+                                                                           DemandDate := order.DemandDate(),ForecastDemandDate := order.ForecastDemandDate(),IsFilling := true,
+                                                                           OrderType := 'Pulling',PanelBigSheetQuantity := order.PanelBigSheetQuantity(),ProductID := order.ProductID(),
+                                                                           Quantity := order.Quantity(),SalesSegmentName := order.SalesSegmentName(),SalesAmount := order.SalesAmount(),
+                                                                           SchemeName := schemeName,StockingPointID := order.StockingPointID(),UnitOfMeasureName := order.UnitOfMeasureName(),
+                                                                           VerNo := verNoOrder.VerNo()
+                                                                           );
+                                                                           
+        filllingCapacityOrderScheme.FillingCapacityOrder(relinsert, fillingOrder);
+    }
   *]
 }
diff --git a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl
new file mode 100644
index 0000000..5040b96
--- /dev/null
+++ b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod HasAlreadyRelease (
+  MacroPlan owner
+) as Boolean
+{
+  TextBody:
+  [*
+    // NBoTk Sep-19-2023 (created)
+    
+    value := selectobject( owner,FilllingCapacityOrderScheme,scheme,
+                          scheme.IsRelease()
+                          )
+    return value.IsRelease();
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeBusinessTypeString.qbl b/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
deleted file mode 100644
index a9f779b..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
+++ /dev/null
@@ -1,11 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method CapacityAndSaleBudgeBusinessTypeString () as owning String
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    result := selectuniquevalues( this, CapacityAndSaleBudge, item, true, item.BusinessType() );
-    return result.Concatenate( ";" ) ;
-  *]
-}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl b/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
deleted file mode 100644
index 753ff1b..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
+++ /dev/null
@@ -1,11 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method CapacityAndSaleBudgePlaceOfProductionOfArrayString () as owning String
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    result := selectuniquevalues( this, CapacityAndSaleBudge, item, true, item.PlaceOfProductionOfArray() );
-    return result.Concatenate( ";" ) ;
-  *]
-}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
index f69a011..dd75de6 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
@@ -16,55 +16,5 @@
     MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat2, "PROD_2", 1777.0, "PROD_2_DESC" );
     MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 3, "鎵嬫満浜嬩笟閮�", "MAT_3", "MAT_3", "TYPE_1", 233.0, "閫氱敤", "鐭懆鏈�" );
     MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 4, "鎵嬫満浜嬩笟閮�", "MAT_4", "MAT_4", "TYPE_2", 233.0, "涓撶敤", "鐭懆鏈�" );
-    
-    
-    // yypsybs Sep-15-2023 (created)
-    info( "CapacityAndSaleBudge::InitTestData" )
-    this.CapacityAndSaleBudge( relflush );
-    for( i := 1; i < 100; i := i + 1 ) {
-      row := this.CapacityAndSaleBudge( relnew, 
-                                        PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String]Number::Random( 1, 10 ), 
-                                        BusinessType := "浜嬩笟閮�" + [String]Number::Random( 1, 10 ), 
-                                        CapacityInPCSInMonth1 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth2 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth3 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth4 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth5 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth6 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth7 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth8 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth9 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth10 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth11 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth12 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth1 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth2 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth3 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth4 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth5 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth6 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth7 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth8 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth9 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth10 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth11 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth12 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth1 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth2 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth3 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth4 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth5 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth6 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth7 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth8 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth9 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth10 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth11 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth12 := Number::Random( 1, 10000 ) 
-                                      );
-      row.CapacityInPCSTotal( row.GetCapacityInPCSInYear() );
-      row.CapacityInSheetTotal( row.GetCapacityInSheetInYear() );
-      row.SaleAmountTotal( row.GetSaleAmountInYear() );
-    }
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl
new file mode 100644
index 0000000..20d4032
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBusinessTypeName (
+  String name
+) as String
+{
+  Description: '浠庝簨涓氶儴涓枃鍚嶇О鍒扮缉鍐欑殑杞崲'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    result := "";
+    if( name = "闆嗗洟" ){
+      result := "TM";
+      }else if( name = "鎵嬫満浜嬩笟閮�" ){
+        result := "SJ";
+        }else if( name = "IT浜嬩笟閮�" ){
+        result := "IT";
+        }else if( name = "杞﹁浇浜嬩笟閮�" ){
+        result := "CZ";
+        }else if( name = "姹借溅鐢靛瓙浜嬩笟閮�" ){
+        result := "QD";
+        }else if( name = "涓撴樉浜嬩笟閮�" ){
+        result := "ZX";
+        }else if( name = "绌挎埓浜嬩笟閮�" ){
+        result := "CD";
+        }else if( name = "闈㈡澘" ){
+        result := "MB";
+        }
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl
new file mode 100644
index 0000000..97b09dc
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNextCalType (
+  String latestcaltype,
+  String businesstype
+) as String
+{
+  Description: '鑾峰彇涓嬩竴涓绠楁楠�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    result := "";
+    if( businesstype = "TM"){
+      if( latestcaltype = "" ){
+        result := "SCENE";
+        }else if( latestcaltype = "SCENE" ){
+          result := "TM_SOP_R1";
+          }else if( latestcaltype = "TM_SOP_R1" ){
+          result := "TM_SOP_R2";
+          }else if( latestcaltype = "TM_SOP_R2" ){
+          error( "This version is ended" );
+          }
+      }else{
+      if( latestcaltype = "TM_SOP_R1" ){
+        result := businesstype + "_SOP_R1";
+        }else if( latestcaltype = "TM_SOP_R2" ){
+          result := businesstype + "_MPS_R1";
+          }else if( latestcaltype = businesstype + "_MPS_R1" ){
+          result := businesstype + "_MRP_R1";
+          }else if( latestcaltype = businesstype + "_MRP_R1" ){
+          result := businesstype + "_MPS_R2";
+          }else if( latestcaltype = businesstype + "_MPS_R2" ){
+          result := businesstype + "_MRP_R2";
+          }else if( latestcaltype = businesstype + "_MRP_R2" ){
+          error( "This version is ended" );
+        }
+    }
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl
new file mode 100644
index 0000000..a8610b8
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl
@@ -0,0 +1,71 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetOutputVersionData (
+  GlobalOTDTable owner,
+  MacroPlan macroplan,
+  String businessname
+)
+{
+  Description: '褰㈡垚骞跺彂閫佺増鏈暟鎹�'
+  TextBody:
+  [*
+    // Administrator Sep-14-2023 (created)
+    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+    
+    // Clean exist data
+    traverse( owner, MappingVersionControl, mpc, true ){
+      mpc.Delete();
+    }
+    
+    // Get Latest version
+    latestversion := VersionControl::FindLatestUpdateVersion( owner, businesstype );
+    createtime := latestversion.CreateTime();
+    datafrom := businesstype;
+    releasetime := latestversion.ReleaseTime();
+    versionid := latestversion.VersionID() + "-" + latestversion.CalType();
+    info( versionid );
+    versionname := latestversion.LongVersionName();
+    user := latestversion.User();
+    
+    // Get Data list to deal
+    listtodeal := selectset( macroplan, 
+                              Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, 
+                              pispip, 
+                              pispip.SalesDemandQuantity() > 0 );
+    
+    if( latestversion.CalType() = "TM_SOP_R1" ){
+      listtodeal := selectset( macroplan, 
+                               Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, 
+                               pispip, 
+                               pispip.ProductInStockingPoint_MP().ProductID().StartsWith( "C1" ) );
+      }
+    
+    traverse( listtodeal, Elements, item, true ){
+      endtime := item.End();
+      productid := item.ProductInStockingPoint_MP().ProductID();
+      qty := item.SalesDemandQuantity();
+      starttime := item.Start();
+      stockingpointid := item.StockingPointInPeriod().StockingPointID();
+      datato := "TM";
+      if( businesstype <> "TM" ){
+        datato := "TM";
+        }
+      owner.MappingVersionControl( relnew, 
+                                   CreateTime := createtime, 
+                                   DataFrom := datafrom, 
+                                   DataTo := datato,
+                                   EndTime := endtime, 
+                                   ProductID := productid, 
+                                   Qty := qty, 
+                                   ReleaseTime := releasetime, 
+                                   StartTime := starttime, 
+                                   StockingPointID := stockingpointid, 
+                                   User := user, 
+                                   VersionID := versionid, 
+                                   VersionName := versionname )
+      }
+    
+    // Send Data To DB
+    owner.Broker_OTD_VersionControlToDB().Execute();
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl
new file mode 100644
index 0000000..b094140
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetVersionData (
+  GlobalOTDTable owner,
+  String businessname
+)
+{
+  Description: '鎶藉彇骞跺鐞嗙増鏈暟鎹�'
+  TextBody:
+  [*
+    // Administrator Sep-14-2023 (created)
+    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+    releasetime := DateTime::ActualTime();
+    // Clean exist data
+    traverse( owner, MappingVersionControl, mpc, true ){
+      mpc.Delete();
+    }
+    
+    // Get Data From DB
+    owner.Broker_OTD_VersionControl().Execute();
+    
+    // Get Data list to deal
+    listtodeal := selectset( owner, MappingVersionControl, item, item.DataTo() = businesstype );
+    
+    traverse( listtodeal, Elements, item, true ){
+      versionid := item.VersionID();
+      existversion := VersionControl::FindByFullVersionID( owner, versionid );
+      if( isnull( existversion ) ){
+        longversionname := item.VersionName();
+        longversionnamelist := longversionname.Tokenize( "-" );
+        shortversionname := longversionnamelist.Element( longversionnamelist.Size() - 1 );
+        caltype := shortversionname.SubString( 0, 10 );
+        shortversionid := versionid.ReplaceAll( "-" + caltype, "" );
+        newversioncontrol := VersionControl::Create( owner, 
+                                                     item.DataFrom(), 
+                                                     caltype, 
+                                                     item.CreateTime(), 
+                                                     shortversionid, 
+                                                     longversionname, 
+                                                     shortversionname, 
+                                                     item.User() );
+        newversioncontrol.IsReleased( true );
+        newversioncontrol.ReleaseTime( releasetime );
+        } 
+      }
+  *]
+}
diff --git a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
new file mode 100644
index 0000000..717a4f8
--- /dev/null
+++ b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+Method CapacityAndSaleBudgeBusinessTypeString () as owning String
+{
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    result := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, true, item.BusinessType() );
+    return result.Concatenate( ";" ) ;
+  *]
+}
diff --git a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
new file mode 100644
index 0000000..2612296
--- /dev/null
+++ b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+Method CapacityAndSaleBudgePlaceOfProductionOfArrayString () as owning String
+{
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    result := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, true, item.PlaceOfProductionOfArray() );
+    return result.Concatenate( ";" ) ;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_CapacityAndSaleBudgeYearsString.qbl b/_Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
similarity index 100%
rename from _Main/BL/Type_GlobalDTOTable/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
rename to _Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
diff --git a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
new file mode 100644
index 0000000..3cb7643
--- /dev/null
+++ b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod TestData (
+  MPSync mpSync,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // yypsybs Sep-20-2023 (created)
+    
+    info( "MPSync::TestData" );
+    
+    productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
+    
+    info( "productCodeList : " + [String]productCodeList.Size() );
+    
+    mpSync.MappingCapacityAndSaleBudge( relflush );
+    for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
+      productCode := productCodeList.Element( i - 1 );
+      mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
+                                                                         ProductCode := productCode,
+                                                                         BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3 + 1), 
+                                                                         PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4 + 1)
+                                                                          );
+      for( month := 1; month <= 12; month := month + 1 ) {
+        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]month );
+        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
+        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]month );
+        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
+        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]month );
+        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
+      }
+      mappingCapacityAndSaleBudge.CapacityInPCSTotal( mappingCapacityAndSaleBudge.GetCapacityInPCSInYear() );
+      mappingCapacityAndSaleBudge.CapacityInSheetTotal( mappingCapacityAndSaleBudge.GetCapacityInSheetInYear() );
+      mappingCapacityAndSaleBudge.SaleAmountTotal( mappingCapacityAndSaleBudge.GetSaleAmountInYear() );
+    }
+    
+    result := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    
+    info( "MappingCapacityAndSaleBudge size : " + [String]result.Size() );
+  *]
+}
diff --git a/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl b/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
index 2c92dc7..d374c5e 100644
--- a/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
+++ b/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
@@ -3,19 +3,20 @@
 StaticMethod CreateTestData (
   MacroPlan parent,
   String businessType,
-  String orgCode
+  String orgCode,
+  String productCode
 ) as MappingBOM
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    value := select( parent, MappingBOM, bom, bom.BusinessType() = businessType and bom.OrganCode() = orgCode );
+    value := select( parent, MappingBOM, bom, bom.BusinessType() = businessType and bom.OrganCode() = orgCode and bom.ProductCode() = productCode );
     if( isnull( value ) ) {
       value := parent.MappingBOM( relnew, 
                                   BusinessType := businessType,
                                   OrganCode := orgCode,
+                                  ProductCode := productCode, 
                                   ProcessSection := "", 
-                                  ProductCode := "", 
                                   ComponentCode := "", 
                                   AlternativeMaterialCode := "" );
     }
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl
new file mode 100644
index 0000000..79ee8e4
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityEquivalent
+{
+  #keys: '3[414384.0.867241217][414384.0.867241216][414384.0.867241218]'
+  Description: '浜ц兘褰撻噺'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInJan.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInJan.qbl
deleted file mode 100644
index acb1511..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInJan.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInJan
-{
-  #keys: '3[414384.0.803580132][414384.0.803580131][414384.0.803580133]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
new file mode 100644
index 0000000..5aa064a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth1
+{
+  #keys: '3[414384.0.864360392][414384.0.864360391][414384.0.864360393]'
+  Description: '1鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
new file mode 100644
index 0000000..2d0823b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth10
+{
+  #keys: '3[414384.0.864360398][414384.0.864360397][414384.0.864360399]'
+  Description: '10鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
new file mode 100644
index 0000000..3e4e17f
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth11
+{
+  #keys: '3[414384.0.864360395][414384.0.864360394][414384.0.864360396]'
+  Description: '11鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
new file mode 100644
index 0000000..a494071
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth12
+{
+  #keys: '3[414384.0.864360386][414384.0.864360385][414384.0.864360387]'
+  Description: '12鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
new file mode 100644
index 0000000..96e4277
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth2
+{
+  #keys: '3[414384.0.864360371][414384.0.864360370][414384.0.864360372]'
+  Description: '2鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
new file mode 100644
index 0000000..c82ee6a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth3
+{
+  #keys: '3[414384.0.864360374][414384.0.864360373][414384.0.864360375]'
+  Description: '3鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
new file mode 100644
index 0000000..14a2e6c
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth4
+{
+  #keys: '3[414384.0.864360377][414384.0.864360376][414384.0.864360378]'
+  Description: '4鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
new file mode 100644
index 0000000..e889eda
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth5
+{
+  #keys: '3[414384.0.864360380][414384.0.864360379][414384.0.864360381]'
+  Description: '5鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
new file mode 100644
index 0000000..227edb2
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth6
+{
+  #keys: '3[414384.0.864360401][414384.0.864360400][414384.0.864360402]'
+  Description: '6鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
new file mode 100644
index 0000000..007d324
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth7
+{
+  #keys: '3[414384.0.864360383][414384.0.864360382][414384.0.864360384]'
+  Description: '7鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
new file mode 100644
index 0000000..0bea26a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth8
+{
+  #keys: '3[414384.0.864360368][414384.0.864360367][414384.0.864360369]'
+  Description: '8鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
new file mode 100644
index 0000000..ce4956a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth9
+{
+  #keys: '3[414384.0.864360389][414384.0.864360388][414384.0.864360390]'
+  Description: '9鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl
new file mode 100644
index 0000000..c7b3fc7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSTotal
+{
+  #keys: '3[414384.0.867241226][414384.0.867241225][414384.0.867241227]'
+  Description: '骞翠骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInJan.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInJan.qbl
deleted file mode 100644
index b063ea3..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInJan.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInJan
-{
-  #keys: '3[414384.0.803580142][414384.0.803580141][414384.0.803580143]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
new file mode 100644
index 0000000..f2ed586
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth1
+{
+  #keys: '3[414384.0.864360406][414384.0.864360405][414384.0.864360407]'
+  Description: '1鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
new file mode 100644
index 0000000..9e791d0
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth10
+{
+  #keys: '3[414384.0.864360430][414384.0.864360429][414384.0.864360431]'
+  Description: '10鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
new file mode 100644
index 0000000..283eb69
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth11
+{
+  #keys: '3[414384.0.864360427][414384.0.864360426][414384.0.864360428]'
+  Description: '11鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
new file mode 100644
index 0000000..b91d698
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth12
+{
+  #keys: '3[414384.0.864360439][414384.0.864360438][414384.0.864360440]'
+  Description: '12鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
new file mode 100644
index 0000000..b73c187
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth2
+{
+  #keys: '3[414384.0.864360409][414384.0.864360408][414384.0.864360410]'
+  Description: '2鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
new file mode 100644
index 0000000..7d60a74
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth3
+{
+  #keys: '3[414384.0.864360421][414384.0.864360420][414384.0.864360422]'
+  Description: '3鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
new file mode 100644
index 0000000..6c46554
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth4
+{
+  #keys: '3[414384.0.864360415][414384.0.864360414][414384.0.864360416]'
+  Description: '4鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
new file mode 100644
index 0000000..575b883
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth5
+{
+  #keys: '3[414384.0.864360412][414384.0.864360411][414384.0.864360413]'
+  Description: '5鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
new file mode 100644
index 0000000..5af9a7b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth6
+{
+  #keys: '3[414384.0.864360424][414384.0.864360423][414384.0.864360425]'
+  Description: '6鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
new file mode 100644
index 0000000..dca7992
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth7
+{
+  #keys: '3[414384.0.864360433][414384.0.864360432][414384.0.864360434]'
+  Description: '7鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
new file mode 100644
index 0000000..3daef81
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth8
+{
+  #keys: '3[414384.0.864360436][414384.0.864360435][414384.0.864360437]'
+  Description: '8鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
new file mode 100644
index 0000000..b739807
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth9
+{
+  #keys: '3[414384.0.864360418][414384.0.864360417][414384.0.864360419]'
+  Description: '9鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl
new file mode 100644
index 0000000..1ec9da6
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetTotal
+{
+  #keys: '3[414384.0.867241232][414384.0.867241231][414384.0.867241233]'
+  Description: '骞翠骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl
new file mode 100644
index 0000000..38d2205
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Deleted
+{
+  #keys: '3[414384.0.867241223][414384.0.867241222][414384.0.867241224]'
+  Description: '宸插垹闄�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl
new file mode 100644
index 0000000..cfa5f36
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DisplayTechnology
+{
+  #keys: '3[414384.0.867241208][414384.0.867241207][414384.0.867241209]'
+  Description: '鏄剧ず鎶�鏈垎绫�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl
new file mode 100644
index 0000000..aac3e19
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfCut
+{
+  #keys: '3[414384.0.867241229][414384.0.867241228][414384.0.867241230]'
+  Description: '鍒囧壊鏁�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl
new file mode 100644
index 0000000..0a37a77
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfMask
+{
+  #keys: '3[414384.0.867241241][414384.0.867241240][414384.0.867241242]'
+  Description: 'mask鏁�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl
new file mode 100644
index 0000000..3e69afb
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrgCode
+{
+  #keys: '3[414384.0.867241214][414384.0.867241213][414384.0.867241215]'
+  Description: '涓氬姟閮ㄩ棬'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
new file mode 100644
index 0000000..5f3564c
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlaceOfProductionOfArray
+{
+  #keys: '3[414384.0.864360358][414384.0.864360357][414384.0.864360359]'
+  Description: '闈㈡澘鍩哄湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
new file mode 100644
index 0000000..78ade77
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlaceOfProductionOfEvaporation
+{
+  #keys: '3[414384.0.867241211][414384.0.867241210][414384.0.867241212]'
+  Description: '钂搁晙浜у湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl
new file mode 100644
index 0000000..f503398
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Resolution
+{
+  #keys: '3[414384.0.867241235][414384.0.867241234][414384.0.867241236]'
+  Description: '鍒嗚鲸鐜�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl
new file mode 100644
index 0000000..d061259
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth1
+{
+  #keys: '3[414384.0.864360470][414384.0.864360469][414384.0.864360471]'
+  Description: '1鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl
new file mode 100644
index 0000000..824026b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth10
+{
+  #keys: '3[414384.0.864360449][414384.0.864360448][414384.0.864360450]'
+  Description: '10鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl
new file mode 100644
index 0000000..896ab80
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth11
+{
+  #keys: '3[414384.0.864360443][414384.0.864360442][414384.0.864360444]'
+  Description: '11鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl
new file mode 100644
index 0000000..e6fb2ea
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth12
+{
+  #keys: '3[414384.0.864360455][414384.0.864360454][414384.0.864360456]'
+  Description: '12鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl
new file mode 100644
index 0000000..7f2e07b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth2
+{
+  #keys: '3[414384.0.864360461][414384.0.864360460][414384.0.864360462]'
+  Description: '2鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl
new file mode 100644
index 0000000..cafbdf7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth3
+{
+  #keys: '3[414384.0.864360467][414384.0.864360466][414384.0.864360468]'
+  Description: '3鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl
new file mode 100644
index 0000000..d710f68
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth4
+{
+  #keys: '3[414384.0.864360464][414384.0.864360463][414384.0.864360465]'
+  Description: '4鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl
new file mode 100644
index 0000000..59d0ed8
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth5
+{
+  #keys: '3[414384.0.864360476][414384.0.864360475][414384.0.864360477]'
+  Description: '5鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl
new file mode 100644
index 0000000..bb36165
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth6
+{
+  #keys: '3[414384.0.864360458][414384.0.864360457][414384.0.864360459]'
+  Description: '6鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl
new file mode 100644
index 0000000..68f79e6
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth7
+{
+  #keys: '3[414384.0.864360473][414384.0.864360472][414384.0.864360474]'
+  Description: '7鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl
new file mode 100644
index 0000000..212ce32
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth8
+{
+  #keys: '3[414384.0.864360446][414384.0.864360445][414384.0.864360447]'
+  Description: '8鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl
new file mode 100644
index 0000000..e014c2a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth9
+{
+  #keys: '3[414384.0.864360452][414384.0.864360451][414384.0.864360453]'
+  Description: '9鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl
new file mode 100644
index 0000000..db943a7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountTotal
+{
+  #keys: '3[414384.0.867241220][414384.0.867241219][414384.0.867241221]'
+  Description: '骞撮攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SalesAmountInWInJan.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SalesAmountInWInJan.qbl
deleted file mode 100644
index 97fa1b8..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SalesAmountInWInJan.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SalesAmountInWInJan
-{
-  #keys: '3[414384.0.803580152][414384.0.803580151][414384.0.803580153]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl
new file mode 100644
index 0000000..8356f90
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShippingForm
+{
+  #keys: '3[414384.0.867241244][414384.0.867241243][414384.0.867241245]'
+  Description: '鍑鸿揣褰㈡��'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl
new file mode 100644
index 0000000..c5be8e2
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CapacityEquivalent
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl
new file mode 100644
index 0000000..81ea97e
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: DisplayTechnology
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl
new file mode 100644
index 0000000..c512ccf
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: NumberOfCut
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl
new file mode 100644
index 0000000..27114c0
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: NumberOfMask
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl
new file mode 100644
index 0000000..e95264f
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrgCode
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl
new file mode 100644
index 0000000..0c8ee87
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: PlaceOfProductionOfEvaporation
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl
new file mode 100644
index 0000000..e505ebf
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Resolution
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl
new file mode 100644
index 0000000..bf077c5
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ShippingForm
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl
new file mode 100644
index 0000000..d3faf58
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInPCSInYear () as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    for( i := 1; i <= 12; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
new file mode 100644
index 0000000..7ddf422
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInHalfYear (
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    fromMonth := 1 + ( halfNo - 1 ) * 6;
+    toMonth := 6 + ( halfNo - 1 ) * 6;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl
new file mode 100644
index 0000000..75d8ad6
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInSeason (
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    fromMonth := 1 + ( seasonNo - 1 ) * 3;
+    toMonth := 3 + ( seasonNo - 1 ) * 3;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl
new file mode 100644
index 0000000..ddb2a10
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInYear () as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    for( i := 1; i <= 12; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl
new file mode 100644
index 0000000..93bf2ba
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetSaleAmountInYear () as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    for( i := 1; i <= 12; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
new file mode 100644
index 0000000..a004017
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleByMonth (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  Description: '閿�鍞锛圵锛�'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]monthNo );
+    value := sum( parent, 
+                  MappingCapacityAndSaleBudge, 
+                  item, 
+                  productNo.Find( item.ProductCode() ) > -1,
+                  field.GetReal( item ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
new file mode 100644
index 0000000..c5ef67c
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleByYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo
+) as Real
+{
+  Description: '閿�鍞锛圵锛�'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetSaleAmountInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
new file mode 100644
index 0000000..d0d21e7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByHalfYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetCapacityInSheetInHalfYear( halfNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
new file mode 100644
index 0000000..03c0529
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByMonth (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  Description: '浜ц兘-瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]monthNo );
+    value := sum( parent, 
+                  MappingCapacityAndSaleBudge, 
+                  item, 
+                  productNo.Find( item.ProductCode() ) > -1,
+                  field.GetReal( item ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
new file mode 100644
index 0000000..3426e30
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetBySeason (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    
+    list := selectset( parent, 
+                       MappingCapacityAndSaleBudge, 
+                       item, 
+                       productNo.Find( item.ProductCode() ) > -1 );
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetCapacityInSheetInSeason( seasonNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
new file mode 100644
index 0000000..124d7ff
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetCapacityInSheetInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_CreateTime.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_CreateTime.qbl
new file mode 100644
index 0000000..412204a
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_CreateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateTime
+{
+  #keys: '3[412960.0.150120147][412960.0.150120146][412960.0.150120148]'
+  Description: '鍒涘缓鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_DataFrom.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_DataFrom.qbl
new file mode 100644
index 0000000..d35de79
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_DataFrom.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DataFrom
+{
+  #keys: '3[412960.0.150120067][412960.0.150120066][412960.0.150120068]'
+  Description: '鏁版嵁鍙戝嚭鐨勯儴闂ㄥ悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_DataTo.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_DataTo.qbl
new file mode 100644
index 0000000..c08ce30
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_DataTo.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DataTo
+{
+  #keys: '3[412960.0.150120077][412960.0.150120076][412960.0.150120078]'
+  Description: '鎺ユ敹鏁版嵁鐨勯儴闂ㄥ悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_EndTime.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_EndTime.qbl
new file mode 100644
index 0000000..bd00968
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_EndTime.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndTime
+{
+  #keys: '3[412960.0.150120127][412960.0.150120126][412960.0.150120128]'
+  Description: '缁撴潫鏃堕棿'
+  IsReadOnly: true
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_ProductID.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_ProductID.qbl
new file mode 100644
index 0000000..8806689
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_ProductID.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[412960.0.150120087][412960.0.150120086][412960.0.150120088]'
+  Description: '鐗╂枡缂栫爜'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_Qty.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_Qty.qbl
new file mode 100644
index 0000000..572c5c9
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_Qty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Qty
+{
+  #keys: '3[412960.0.150120097][412960.0.150120096][412960.0.150120098]'
+  Description: '鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_ReleaseTime.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_ReleaseTime.qbl
new file mode 100644
index 0000000..9bab647
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_ReleaseTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReleaseTime
+{
+  #keys: '3[412960.0.150120157][412960.0.150120156][412960.0.150120158]'
+  Description: '鍙戝竷鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_StartTime.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_StartTime.qbl
new file mode 100644
index 0000000..270b408
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_StartTime.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartTime
+{
+  #keys: '3[412960.0.150120117][412960.0.150120116][412960.0.150120118]'
+  Description: '寮�濮嬫椂闂�'
+  IsReadOnly: true
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_StockingPointID.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..b8f18c4
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_StockingPointID.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[412960.0.150120107][412960.0.150120106][412960.0.150120108]'
+  Description: '搴撳瓨鐐圭紪鐮�'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_User.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_User.qbl
new file mode 100644
index 0000000..484ce50
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_User.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute User
+{
+  #keys: '3[412960.0.150120137][412960.0.150120136][412960.0.150120138]'
+  Description: '鐢ㄦ埛鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_VersionID.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_VersionID.qbl
new file mode 100644
index 0000000..c64363f
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_VersionID.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionID
+{
+  #keys: '3[412960.0.150120057][412960.0.150120056][412960.0.150120058]'
+  Description: '鏁版嵁搴撴娊鍙栫殑鍏ㄩ噺鐗堟湰鍙�'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingVersionControl/Attribute_VersionName.qbl b/_Main/BL/Type_MappingVersionControl/Attribute_VersionName.qbl
new file mode 100644
index 0000000..e6417f2
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/Attribute_VersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionName
+{
+  #keys: '3[412960.0.150124918][412960.0.150124917][412960.0.150124919]'
+  Description: '鐗堟湰鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingVersionControl/TypeIndex_TypeIndexVersionControl.qbl b/_Main/BL/Type_MappingVersionControl/TypeIndex_TypeIndexVersionControl.qbl
new file mode 100644
index 0000000..b1b5794
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/TypeIndex_TypeIndexVersionControl.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex TypeIndexVersionControl
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: VersionID
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: EndTime
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: StockingPointID
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: StartTime
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: ProductID
+    }
+  ]
+}
diff --git a/_Main/BL/Type_MappingVersionControl/_ROOT_Type_MappingVersionControl.qbl b/_Main/BL/Type_MappingVersionControl/_ROOT_Type_MappingVersionControl.qbl
new file mode 100644
index 0000000..ff148d7
--- /dev/null
+++ b/_Main/BL/Type_MappingVersionControl/_ROOT_Type_MappingVersionControl.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MappingVersionControl
+{
+  #keys: '5[412960.0.150120040][412960.0.150120038][0.0.0][412960.0.150120039][412960.0.150120041]'
+  BaseType: Object
+  Description: '鐗堟湰鎺у埗涓棿琛�'
+  StructuredName: 'MappingVersionControls'
+}
diff --git "a/_Main/BL/Type_OrderLockLog/Attribute_CustomerName\04323.qbl" "b/_Main/BL/Type_OrderLockLog/Attribute_CustomerName\04323.qbl"
new file mode 100644
index 0000000..77e60f5
--- /dev/null
+++ "b/_Main/BL/Type_OrderLockLog/Attribute_CustomerName\04323.qbl"
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerName
+{
+  #keys: '3[412960.0.217504426][412960.0.217504425][412960.0.217504427]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_End.qbl b/_Main/BL/Type_OrderLockLog/Attribute_End.qbl
new file mode 100644
index 0000000..bc7fd91
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_End.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute End
+{
+  #keys: '3[412960.0.217504488][412960.0.217504487][412960.0.217504489]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl b/_Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl
new file mode 100644
index 0000000..3f4c39b
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[412960.0.217504467][412960.0.217504466][412960.0.217504468]'
+  ValueType: Date
+}
diff --git "a/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl" "b/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl"
new file mode 100644
index 0000000..7594124
--- /dev/null
+++ "b/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl"
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[412960.0.217504477][412960.0.217504476][412960.0.217504478]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl b/_Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl
new file mode 100644
index 0000000..9e81f78
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_LastModify.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModify
+{
+  #keys: '3[412960.0.217504501][412960.0.217504500][412960.0.217504502]'
+  Description: '鏈�鍚庝慨鏀逛汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl b/_Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl
new file mode 100644
index 0000000..8698211
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_LastModifyTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModifyTime
+{
+  #keys: '3[412960.0.217504498][412960.0.217504497][412960.0.217504499]'
+  Description: '鏈�鍚庢搷浣滄椂闂�'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl b/_Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl
new file mode 100644
index 0000000..fe37524
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[412960.0.217504386][412960.0.217504385][412960.0.217504387]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_Price.qbl b/_Main/BL/Type_OrderLockLog/Attribute_Price.qbl
new file mode 100644
index 0000000..b0c9e62
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[412960.0.217504457][412960.0.217504456][412960.0.217504458]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl b/_Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl
new file mode 100644
index 0000000..46b6f3b
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[412960.0.217504396][412960.0.217504395][412960.0.217504397]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl b/_Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl
new file mode 100644
index 0000000..5216b60
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[412960.0.217504437][412960.0.217504436][412960.0.217504438]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..8e484e2
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[412960.0.217504406][412960.0.217504405][412960.0.217504407]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl b/_Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..a344af9
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[412960.0.217504416][412960.0.217504415][412960.0.217504417]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..fccc2cb
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[412960.0.217504447][412960.0.217504446][412960.0.217504448]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl b/_Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl
new file mode 100644
index 0000000..6ef422d
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/DefaultValue_LastModify.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: LastModify
+}
diff --git a/_Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl b/_Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl
new file mode 100644
index 0000000..ac23238
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/_ROOT_Type_OrderLockLog.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OrderLockLog
+{
+  #keys: '5[412960.0.217504330][412960.0.217504328][0.0.0][412960.0.217504329][412960.0.217504331]'
+  BaseType: Object
+  Description: '璁㈠崟閿佸畾鎿嶄綔鏃ュ織'
+  StructuredName: 'OrderLockLogs'
+}
diff --git a/_Main/BL/Type_PriorityFactor/Attribute_coefficient.qbl b/_Main/BL/Type_PriorityFactor/Attribute_coefficient.qbl
index 732396f..187fc98 100644
--- a/_Main/BL/Type_PriorityFactor/Attribute_coefficient.qbl
+++ b/_Main/BL/Type_PriorityFactor/Attribute_coefficient.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute coefficient
+Attribute Coefficient
 {
   #keys: '3[414382.0.456067070][414382.0.456067069][414382.0.456067071]'
   Description: '浼樺厛鍥犲瓙绯绘暟'
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl
index 128d2cc..6f6f24f 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetDataByBusinessType (
-  GlobalOTDTable owner,
+  MacroPlan owner,
   String businessType
 ) as owning PriorityFactors
 {
@@ -12,7 +12,6 @@
     list := selectset( owner,PriorityFactor,p,
                        p.BusinessType() = businessType
                        );
-    info("list size :"  + [String]list.Size());
     return &list;
   *]
 }
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
index 45688a6..1d5ff08 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod InitData (
-  GlobalOTDTable owner
+  MacroPlan owner
 )
 {
   TextBody:
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl
new file mode 100644
index 0000000..55b4b64
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute GradeDesc
+{
+  #keys: '3[414382.0.475830209][414382.0.475830208][414382.0.475830210]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_GroupName.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_GroupName.qbl
deleted file mode 100644
index 7dc0270..0000000
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_GroupName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute GroupName
-{
-  #keys: '3[414382.0.444830133][414382.0.444830132][414382.0.444830134]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_coefficient.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_coefficient.qbl
deleted file mode 100644
index e23d822..0000000
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_coefficient.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute coefficient
-{
-  #keys: '3[414382.0.444850041][414382.0.444850040][414382.0.444850042]'
-  Description: '浼樺厛鍥犲瓙绯绘暟'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_PriorityFactorDetails/Function_CalcIsBusinessType.qbl b/_Main/BL/Type_PriorityFactorDetails/Function_CalcIsBusinessType.qbl
deleted file mode 100644
index 96a9f70..0000000
--- a/_Main/BL/Type_PriorityFactorDetails/Function_CalcIsBusinessType.qbl
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Function CalcIsBusinessType
-{
-  TextBody:
-  [*
-    // NBoTk Sep-17-2023 (created)
-    
-    value := true;
-    
-    if( this.GroupName() <> "" )
-    {
-        value := false;
-    }
-    
-    this.IsBusinessType( value );
-  *]
-}
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl
index 7df229b..536d7e8 100644
--- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl
@@ -1,17 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ClearTestData (
-  GlobalOTDTable owner
+  MacroPlan owner
 )
 {
   TextBody:
   [*
     // NBoTk Sep-18-2023 (created)
     
-    info(1111 );
-    owner.PriorityFactorDetails(relflush );
-    info(2222);
     owner.PriorityFactor(relflush );
-    info(3333 );
   *]
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_CreateTestData.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_CreateTestData.qbl
index 1c95944..4954d67 100644
--- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_CreateTestData.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_CreateTestData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateTestData (
-  GlobalOTDTable owner
+  MacroPlan owner
 )
 {
   TextBody:
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByBusinessType.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByBusinessType.qbl
deleted file mode 100644
index 3b64a2a..0000000
--- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByBusinessType.qbl
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetDataByBusinessType (
-  GlobalOTDTable owner,
-  String businessType
-) as owning PriorityFactorDetailss
-{
-  TextBody:
-  [*
-    // NBoTk Sep-18-2023 (created)
-    
-    list := selectset( owner,PriorityFactorDetails,p,
-                       p.BusinessType() = businessType
-                       );
-    info("list size :"  + [String]list.Size());
-    return &list;
-  *]
-}
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl
new file mode 100644
index 0000000..1f31939
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDataByPriorityFactor (
+  PriorityFactor priorityFactor,
+  MacroPlan owner
+) as owning PriorityFactorDetailss
+{
+  TextBody:
+  [*
+    // NBoTk Sep-18-2023 (created)
+    
+    list := selectset( owner,PriorityFactor.PriorityFactorDetails,p,
+                       p.BusinessType() = priorityFactor.BusinessType() and priorityFactor.Name() = p.PriorityFactorName()
+                       );
+    
+    return &list;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
index 4ecde5e..9327dbe 100644
--- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod InitData (
-  GlobalOTDTable owner
+  MacroPlan owner
 )
 {
   TextBody:
@@ -12,23 +12,23 @@
     
     
     
-    traverse( owner, PriorityFactor , p)
+    traverse( owner, PriorityFactor , p) 
     {
         isBusinessType := false;
         if( p.BusinessType() <> "闆嗗洟闈㈡澘" )
         {
-            isBusinessType := true;
+            isBusinessType := true; 
         }
       
-        owner.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                      IsRange := false,GradingName := "澶х泩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
-        owner.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                      IsRange := false,GradingName := "灏忕泩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
-        owner.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
+        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
                                      IsRange := false,GradingName := "鎸佸钩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
-        owner.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
+        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
                                      IsRange := false,GradingName := "灏忎簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
-        owner.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
+        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
                                      IsRange := false,GradingName := "澶т簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
     }
   *]
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..4cc5680
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414382.0.488041999][414382.0.488041998][414382.0.488042000]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl
new file mode 100644
index 0000000..ce4c95c
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CalculateValue
+{
+  #keys: '3[414382.0.488041974][414382.0.488041973][414382.0.488041975]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl
new file mode 100644
index 0000000..a142044
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Desc
+{
+  #keys: '3[414382.0.488042011][414382.0.488042010][414382.0.488042012]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl
new file mode 100644
index 0000000..1c416d1
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Formula
+{
+  #keys: '3[414382.0.488041964][414382.0.488041963][414382.0.488041965]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_Name.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_Name.qbl
new file mode 100644
index 0000000..709f9c9
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[414382.0.488041954][414382.0.488041953][414382.0.488041955]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl
new file mode 100644
index 0000000..2698209
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDataByBusinessType (
+  MacroPlan owner,
+  String businessType
+) as owning PriorityPolicys
+{
+  TextBody:
+  [*
+    // NBoTk Sep-20-2023 (created)
+    
+    list :=  selectset( owner,PriorityPolicy,p,
+                        p.BusinessType() = businessType
+                        );
+    
+    return &list;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityPolicy/_ROOT_Type_PriorityPolicy.qbl b/_Main/BL/Type_PriorityPolicy/_ROOT_Type_PriorityPolicy.qbl
new file mode 100644
index 0000000..c8614fb
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/_ROOT_Type_PriorityPolicy.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PriorityPolicy
+{
+  #keys: '5[414382.0.488041937][414382.0.488041935][0.0.0][414382.0.488041936][414382.0.488041938]'
+  BaseType: Object
+  Description: '浼樺厛绾х瓥鐣�'
+  StructuredName: 'PriorityPolicys'
+}
diff --git a/_Main/BL/Type_Scenario/Attribute_IsCreateNewVersion.qbl b/_Main/BL/Type_Scenario/Attribute_IsCreateNewVersion.qbl
new file mode 100644
index 0000000..9f65a98
--- /dev/null
+++ b/_Main/BL/Type_Scenario/Attribute_IsCreateNewVersion.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCreateNewVersion
+{
+  #keys: '3[412960.0.155630021][412960.0.155630020][412960.0.155630022]'
+  Description: '鏄惁鍒涘缓浠庨泦鍥OP寮�濮嬬殑鍏ㄦ柊鐗堟湰'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl b/_Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl
new file mode 100644
index 0000000..75d68aa
--- /dev/null
+++ b/_Main/BL/Type_Scenario/Attribute_IsOrderLocked.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsOrderLocked
+{
+  #keys: '3[412960.0.212420059][412960.0.212420058][412960.0.212420060]'
+  Description: '璁㈠崟閿佸畾鐨勬槸鍚﹂攣瀹氱瓫閫夋潯浠�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Scenario/Attribute_VersionID.qbl b/_Main/BL/Type_Scenario/Attribute_VersionID.qbl
new file mode 100644
index 0000000..9acdd4a
--- /dev/null
+++ b/_Main/BL/Type_Scenario/Attribute_VersionID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionID
+{
+  #keys: '3[412960.0.150120035][412960.0.150120034][412960.0.150120036]'
+  Description: '褰撳墠鍦烘櫙瀵瑰簲鐨勭増鏈彿锛屼簬鍒涘缓鐗堟湰鏃剁‘瀹�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Scenario/DefaultValue_VersionID.qbl b/_Main/BL/Type_Scenario/DefaultValue_VersionID.qbl
new file mode 100644
index 0000000..b1c7729
--- /dev/null
+++ b/_Main/BL/Type_Scenario/DefaultValue_VersionID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: VersionID
+}
diff --git a/_Main/BL/Type_Scenario/Method_SetReleased.qbl b/_Main/BL/Type_Scenario/Method_SetReleased.qbl
new file mode 100644
index 0000000..9406560
--- /dev/null
+++ b/_Main/BL/Type_Scenario/Method_SetReleased.qbl
@@ -0,0 +1,5 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetReleased #extension
+{
+}
diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
index 43f414f..69f306b 100644
--- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
+++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
@@ -32,19 +32,21 @@
     this.CapacityAndSaleBudgeChartElement( relflush );
     
     // ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
-    historyData := selectset( otdTable, CapacityAndSaleBudge, item, true );
+    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
     if( placeOfProductionOfArrayChosen <> "" ) {
       historyData := selectset( historyData, Elements, item, item.PlaceOfProductionOfArray() = placeOfProductionOfArrayChosen );
     }
     if( businessTypeChosen <> "" ) {
       historyData := selectset( historyData, Elements, item, item.BusinessType() = businessTypeChosen );
     }
+    //info( "historyData : " + [String]historyData.Size() );
     traverse( historyData, Elements, item ) {
       row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.PlaceOfProductionOfArray() );
       // 璁板綍姣忚鍖呭惈鍝簺product
       CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductCode() );
     }
     rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
+    //info( "rows : " + [String]rows.Size() );
     placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.PlaceOfProductionOfArray() );
     businessTypeList := selectuniquevalues( historyData, Elements, item, item.BusinessType() );
     // 鐢熸垚鍥捐〃鍏冪礌
@@ -56,10 +58,10 @@
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
                                                BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                Quantity := ifexpr( isCapacity,
-                                                                   CapacityAndSaleBudge::GetSheetByYear( productCodeList, otdTable, [Number]year ),
+                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                    MappingForecast::GetQuantityByYear( productCodeList, mappingParent, [Number]year ) )
                                                );  
-          // S&OP
+        // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
@@ -79,10 +81,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                  BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, otdTable, [Number]year, halfNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                      MappingForecast::GetQuantityByHalfYear( productCodeList, mappingParent, [Number]year, halfNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
@@ -99,14 +101,18 @@
       for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
         traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
           productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
+    //      info( "productCodeList : " + [String]productCodeList.Size() );
+    //      info( "MappingCapacityAndSaleBudge::GetSheetBySeason : " + [String]MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) );
+    //      info( "seasonNo : " + [String]seasonNo );
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                  BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetBySeason( productCodeList, otdTable, [Number]year, seasonNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                      MappingForecast::GetQuantityBySeason( productCodeList, mappingParent, [Number]year, seasonNo ) )
                                                  );  
-            // S&OP
+    //      info( "productCodeList : " + [String]productCodeList.Size() );
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
@@ -127,10 +133,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-鐩爣",
                                                  BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByMonth( productCodeList, otdTable, [Number]year, monthNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                      MappingForecast::GetQuantityByMonth( productCodeList, mappingParent, [Number]year, monthNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-" + macroPlan.ScenarioName(),
@@ -151,10 +157,10 @@
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
                                                BusinessTypeOrOrgCode := businessType, 
                                                Quantity := ifexpr( isCapacity,
-                                                                   CapacityAndSaleBudge::GetSheetByYear( productCodeList, otdTable, [Number]year ),
+                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                    MappingForecast::GetQuantityByYear( productCodeList, mappingParent, [Number]year ) )
                                                );  
-          // S&OP
+        // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
@@ -174,10 +180,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                  BusinessTypeOrOrgCode := businessType, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, otdTable, [Number]year, halfNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                      MappingForecast::GetQuantityByHalfYear( productCodeList, mappingParent, [Number]year, halfNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
@@ -198,10 +204,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                  BusinessTypeOrOrgCode := businessType, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetBySeason( productCodeList, otdTable, [Number]year, seasonNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                      MappingForecast::GetQuantityBySeason( productCodeList, mappingParent, [Number]year, seasonNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
@@ -222,10 +228,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-鐩爣",
                                                  BusinessTypeOrOrgCode := businessType, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByMonth( productCodeList, otdTable, [Number]year, monthNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                      MappingForecast::GetQuantityByMonth( productCodeList, mappingParent, [Number]year, monthNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-" + macroPlan.ScenarioName(),
@@ -238,5 +244,15 @@
         }
       }
     }
+    //info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
+    //traverse( this, CapacityAndSaleBudgeChartRow, row ) {
+    //  info( "==鈫�==" );
+    //  info( row.BusinessType() );
+    //  info( row.PlaceOfProductionOfArray() );
+    //  elements := selectset( row, CapacityAndSaleBudgeChartRowProduct, cell, true );
+    //  info( elements.Size() );
+    //  info( row.GetProductCodes().Concatenate( " | " ) );
+    //  info( "==鈫�==" );
+    //}
   *]
 }
diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
index a2a5dc7..6688d88 100644
--- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
@@ -37,39 +37,34 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    productCodeList := construct( Strings );
     historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    info( "historyData : " + [String]historyData.Size() )
     traverse( historyData, Elements, one ) {
-      productCodeList.Add( one.ProductCode() );
-    }
-    traverse( macroPlans, Elements, macroPlan ) {
-      traverse( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip ) {
-        productCodeList.Add( pispip.ProductInStockingPoint_MP().Product_MP().ID() );
-      }
-    }
-    productCodeList := selectuniquevalues( productCodeList, Elements, item, item );
-    info( "product count : " + [String]productCodeList.Size() )
-    // ====鏍规嵁浜у搧鏌ヤ簨涓氶儴鍜岀粍缁囩紪鐮侊紝鐒跺悗鎸変簨涓氶儴鍜岀粍缁囩紪鐮佹眹鎬�====
-    traverse( productCodeList, Elements, productCode ) {
-      bom := MappingBOM::CreateTestData( mappingParent, [String](productCode.Length() mod 3), [String](productCode.Length() mod 4) );
-    //  bom := select( mappingParent, MappingBOM, bom, bom.ProductCode() = productCode );
-      if( not isnull( bom ) ) {
+      productCode := one.ProductCode();
+      MappingBOM::CreateTestData( mappingParent, "浜嬩笟閮�" + [String](productCode.Length() mod 3), [String](productCode.Length() mod 4), productCode );
+      boms := selectset( mappingParent, MappingBOM, bom, bom.ProductCode() = productCode );
+      if( boms.Size() > 0 ) {
+        bom := boms.First();
         businessType := bom.BusinessType();
-        orgCode := bom.OrganCode();
-        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, businessType, orgCode );
+        placeOfProductionOfArray := one.PlaceOfProductionOfArray();
+        // 鐩稿悓闈㈡澘鍩哄湴鍜屼簨涓氶儴鐨勬斁涓�琛�
+        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, businessType, placeOfProductionOfArray );
         // 璁板綍姣忚鍖呭惈鍝簺product
         CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
+      } else {
+    //    info( "111111" );
       }
     }
+    info( "CapacityAndSaleBudgeCompareItemRow : " + [String]selectset( this, CapacityAndSaleBudgeCompareItemRow, item, true ).Size() );
     // ====浠庡乏鍚戝彸鐢熸垚鍒楀ご涓庡唴瀹�====
     // 浜嬩笟閮紝缁勭粐
-    info( "dealing businessType and orgCode" )
+    info( "dealing businessType and placeOfProductionOfArray" )
     columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
-    columnOrgCode := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "缁勭粐缂栫爜" );
+    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
     traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
       cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
       cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      cell := columnOrgCode.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.OrgCode() );
+      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
       cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
     }
     // 闈㈡澘鍒嗛厤閲� - 骞村害棰勭畻 (sheets)
@@ -78,18 +73,18 @@
     if( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
       // 鍘嗗彶鏁版嵁
       traverse( months, Elements, month ) {
-        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + "-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := CapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
-          cellReal := Real::Random( 1.0, 999.0 );
+          cellReal := MappingCapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
+    //      cellReal := Real::Random( 1.0, 999.0 );
           cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
       }
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-total-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cellReal := CapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), otdTable, DateTime::Now().Year() );
-        cellReal := Real::Random( 1.0, 999.0 );
+        cellReal := MappingCapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), mpSync, DateTime::Now().Year() );
+    //    cellReal := Real::Random( 1.0, 999.0 );
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -101,7 +96,7 @@
                                                                                     "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
             traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
               cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-              cellReal := Real::Random( 1.0, 999.0 );
+    //          cellReal := Real::Random( 1.0, 999.0 );
               cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
               cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
             }
@@ -110,7 +105,7 @@
                                                                                  "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
             cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-            cellReal := Real::Random( 1.0, 999.0 );
+    //        cellReal := Real::Random( 1.0, 999.0 );
             cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
             cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
           }
@@ -124,16 +119,16 @@
       traverse( months, Elements, month ) {
         columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + "-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := CapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
-          cellReal := Real::Random( 1.0, 999.0 );
+          cellReal := MappingCapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
+    //      cellReal := Real::Random( 1.0, 999.0 );
           cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
       }
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-total-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cellReal := CapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), otdTable, DateTime::Now().Year() );
-        cellReal := Real::Random( 1.0, 999.0 );
+        cellReal := MappingCapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), mpSync, DateTime::Now().Year() );
+    //    cellReal := Real::Random( 1.0, 999.0 );
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -163,6 +158,7 @@
       // 鍘嗗彶鏁版嵁
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+        // todo
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -181,6 +177,7 @@
       // 鍘嗗彶鏁版嵁
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+        // todo
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -188,6 +185,7 @@
       traverse( macroPlans, Elements, macroPlan ) {
         columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+          // todo
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
@@ -197,7 +195,7 @@
     // 璁剧疆rowNo鍜宑olumnNo
     info( "set rowNo and columnNo" );
     rowNo := 1;
-    rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.BusinessType() + "_" + item.OrgCode() );
+    rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.PlaceOfProductionOfArray() + "_" + item.BusinessType() );
     traverse( rowSorted, Elements, item ) {
       item.RowNo( rowNo );
       rowNo := rowNo + 1;
diff --git a/_Main/BL/Type_VersionControl/Attribute_BusinessType.qbl b/_Main/BL/Type_VersionControl/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..74d04b8
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[412960.0.134860020][412960.0.134860019][412960.0.134860021]'
+  Description: '鍙戝嚭璇ョ増鏈殑浜嬩笟閮紝鐢ㄤ簬璇嗗埆鍜屾牎楠屾槸鍚︽墍鏈変簨涓氶儴鍧囨湁鍥炰紶鏁版嵁锛岀洰鍓嶅彇鍊艰寖鍥翠负[ 闆嗗洟(TM)锛屾墜鏈轰簨涓氶儴(SJ)锛孖T浜嬩笟閮�(IT)锛岃溅杞戒簨涓氶儴(CZ)锛屾苯杞︾數瀛愪簨涓氶儴(QD)锛屼笓鏄句簨涓氶儴(ZX)锛岀┛鎴翠簨涓氶儴(CD)] 銆�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_CalType.qbl b/_Main/BL/Type_VersionControl/Attribute_CalType.qbl
new file mode 100644
index 0000000..6b16db1
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_CalType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CalType
+{
+  #keys: '3[412960.0.136134246][412960.0.136134245][412960.0.136134247]'
+  Description: '璁$畻绫诲瀷锛岀敤浜庢爣娉ㄤ负鍝竴姝ヨ绠楃敓鎴愮殑璇ョ増鏈紝濡係OP_R1'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_CreateTime.qbl b/_Main/BL/Type_VersionControl/Attribute_CreateTime.qbl
new file mode 100644
index 0000000..b5f3fe6
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_CreateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateTime
+{
+  #keys: '3[412960.0.136134256][412960.0.136134255][412960.0.136134257]'
+  Description: '鍒涘缓璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_IsReleased.qbl b/_Main/BL/Type_VersionControl/Attribute_IsReleased.qbl
new file mode 100644
index 0000000..af56d17
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_IsReleased.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsReleased
+{
+  #keys: '3[412960.0.134830023][412960.0.134830022][412960.0.134830024]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl b/_Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl
new file mode 100644
index 0000000..95ba375
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LongVersionName
+{
+  #keys: '3[412960.0.136134236][412960.0.136134235][412960.0.136134237]'
+  Description: '璇ョ増鏈彿瀵瑰簲鐨勭増鏈悕绉帮紝鍚嶇О涓虹敤浜庡墠绔睍绀虹殑鏍煎紡锛屽SCENE(2023-09-06 15:06:57)'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_Notes.qbl b/_Main/BL/Type_VersionControl/Attribute_Notes.qbl
new file mode 100644
index 0000000..68c4a77
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_Notes.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[412960.0.136138830][412960.0.136138829][412960.0.136138831]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl b/_Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl
new file mode 100644
index 0000000..20eac64
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReleaseTime
+{
+  #keys: '3[412960.0.136134266][412960.0.136134265][412960.0.136134267]'
+  Description: '鍙戝竷璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl b/_Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl
new file mode 100644
index 0000000..27d31f3
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SingleVersionName
+{
+  #keys: '3[412960.0.136138782][412960.0.136138781][412960.0.136138783]'
+  Description: '鍗曚釜鐗堟湰鐨勫悕瀛楋紝鍗冲皬鐗堟湰鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_User.qbl b/_Main/BL/Type_VersionControl/Attribute_User.qbl
new file mode 100644
index 0000000..d67d534
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_User.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute User
+{
+  #keys: '3[412960.0.134830093][412960.0.134830092][412960.0.134830094]'
+  Description: '鍒涘缓璇ョ増鏈殑鐢ㄦ埛'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_VersionID.qbl b/_Main/BL/Type_VersionControl/Attribute_VersionID.qbl
new file mode 100644
index 0000000..e211102
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_VersionID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionID
+{
+  #keys: '3[412960.0.134860030][412960.0.134860029][412960.0.134860031]'
+  Description: '11浣嶆暟鐨勬椂闂存埑鎷兼帴鑰屾垚鐨勬枃鏈紝浠呭寘鍚暟瀛楅儴鍒�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl
new file mode 100644
index 0000000..bf6fb53
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CopyVersion (
+  GlobalOTDTable owner,
+  String businessname
+) as VersionControl
+{
+  Description: '澶嶅埗褰撳墠鐗堟湰骞舵洿鏂扮増鏈彿'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    createtime := DateTime::ActualTime();
+    user := QuintiqUser::CurrentUser().Username();
+    starttime := DateTime::Construct(1970,1,1,0,0,0);
+    // Get the local scenario businesstype
+    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+    
+    // Get the older version info
+    oldversionid := "";
+    oldversionname := "";
+    
+    latestversion := VersionControl::FindLatestUpdateVersion( owner, businesstype );
+    copyversionid := latestversion.VersionID();
+    info( copyversionid );
+    
+    if( copyversionid.FindString( "-", 0 ) > 0 ){
+      latestversionlist := copyversionid.Tokenize( "-" );
+      latestversionnamelist := latestversion.LongVersionName().Tokenize( "-" );
+      for( i := 0; i < latestversionlist.Size() - 1; i := i + 1 ){
+        if( oldversionid = "" ){
+          oldversionid := latestversionlist.Element( i );
+          oldversionname := latestversionnamelist.Element( i );
+          }else{
+            oldversionid := oldversionid + "-" + latestversionlist.Element( i );
+            oldversionname := oldversionname + "-" + latestversionnamelist.Element( i );
+            }
+        info( oldversionid );
+        }
+      if( oldversionid <> "" ){
+        oldversionid := oldversionid + "-";
+        oldversionname := oldversionname + "-";
+        } 
+      info( oldversionid );
+      }
+    
+    // Calculate new version info
+    additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 );
+    newversionid := oldversionid + [String]additionversionid;
+    newcaltype := latestversion.CalType();
+    newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")";
+    newversionname := oldversionname + newsingleversionname;
+    info( newversionid );
+    
+    // Create new version
+    newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user );
+    
+    return newversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl b/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl
new file mode 100644
index 0000000..22a6355
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDTable owner,
+  String businesstype,
+  String caltype,
+  DateTime createtime,
+  String versionid,
+  String versionname,
+  String singleversionname,
+  String user
+) as VersionControl
+{
+  Description: '鍒涘缓鐗堟湰'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    newversion := owner.VersionControl( relnew, 
+                                        BusinessType := businesstype, 
+                                        CalType := caltype, 
+                                        CreateTime := createtime, 
+                                        VersionID := versionid, 
+                                        LongVersionName := versionname, 
+                                        SingleVersionName := singleversionname, 
+                                        User := user );
+    
+    return newversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl
new file mode 100644
index 0000000..450646d
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateNewSceneVersion (
+  GlobalOTDTable owner,
+  String businessname
+) as VersionControl
+{
+  Description: '闅忓垱寤哄満鏅繘琛岀増鏈垱寤�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    createtime := DateTime::ActualTime();
+    user := QuintiqUser::CurrentUser().Username();
+    starttime := DateTime::Construct(1970,1,1,0,0,0);
+    // Get the local scenario businesstype
+    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+    
+    // Get the older version info
+    oldversion_id := "";
+    oldversion_name := "";
+    oldcaltype := "";
+    
+    // Calculate new version info
+    additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 );
+    newversionid := oldversion_id + [String]additionversionid;
+    newcaltype := GlobalOTDTable::GetNextCalType( oldcaltype, businesstype );
+    newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")";
+    newversionname := oldversion_name + newsingleversionname;
+    
+    // Create new version
+    newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user );
+    newversion.IsReleased( true );
+    newversion.ReleaseTime( createtime );
+    
+    return newversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
new file mode 100644
index 0000000..8f05fb1
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateNewVersion (
+  GlobalOTDTable owner,
+  String businessname
+) as VersionControl
+{
+  Description: '鍦ㄤ笂涓�鐗堟湰鍚庢坊鍔犳柊鐗堟湰鍙峰苟鐢熸垚鏂扮増鏈�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    createtime := DateTime::ActualTime();
+    user := QuintiqUser::CurrentUser().Username();
+    starttime := DateTime::Construct(1970,1,1,0,0,0);
+    // Get the local scenario businesstype
+    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+    
+    // Get the older version info
+    oldversion_id := "";
+    oldversion_name := "";
+    oldcaltype := "";
+    
+    latestversion := VersionControl::FindLatestUpdateVersion( owner, businesstype );
+    
+    if( isnull( latestversion ) and not businesstype = "TM" ){
+      error( "Can't find last version in " + businesstype.AsQUILL() );
+      }
+    else if( not isnull( latestversion ) ){
+      oldversion_id := latestversion.VersionID() + "-";
+      oldversion_name := latestversion.LongVersionName() + "-";
+      oldcaltype := latestversion.CalType();
+      }
+    
+    
+    // Calculate new version info
+    additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 );
+    newversionid := oldversion_id + [String]additionversionid;
+    newcaltype := GlobalOTDTable::GetNextCalType( oldcaltype, businesstype );
+    newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")";
+    newversionname := oldversion_name + newsingleversionname;
+    
+    // Create new version
+    newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user );
+    
+    return newversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl
new file mode 100644
index 0000000..a281109
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindByFullVersionID (
+  GlobalOTDTable owner,
+  String versionid
+) as VersionControl
+{
+  Description: '閫氳繃鍏ㄩ噺鐗堟湰鍙疯繘琛屾煡鎵�'
+  TextBody:
+  [*
+    // Administrator Sep-14-2023 (created)
+    // Get the version data 
+    resultversion :=  select( owner, VersionControl, version, version.VersionID() + "-" + version.CalType() = versionid );
+    
+    return resultversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
new file mode 100644
index 0000000..4450bf4
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindLatestUpdateVersion (
+  GlobalOTDTable globalotdtable,
+  String businesstype
+) as VersionControl
+{
+  Description: '鑾峰彇鏌愪簨涓氶儴鐩墠鏈�鏂扮殑鐗堟湰鍙�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    latestversion := maxselect( globalotdtable, 
+                                VersionControl, 
+                                version, 
+                                version.BusinessType()=businesstype and version.IsReleased()=true, 
+                                version.CreateTime() );
+    
+    return latestversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl
new file mode 100644
index 0000000..df4f8f4
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindLatestVersion (
+  GlobalOTDTable globalotdtable,
+  String businesstype
+) as VersionControl
+{
+  Description: '鑾峰彇鏌愪簨涓氶儴鐩墠鏈�鏂扮殑鐗堟湰鍙�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    latestversion := maxselect( globalotdtable, 
+                                VersionControl, 
+                                version, 
+                                version.BusinessType()=businesstype, 
+                                version.CreateTime() );
+    
+    return latestversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl
new file mode 100644
index 0000000..7e7ec19
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindReleasedVersions (
+  GlobalOTDTable globalotdtable,
+  String businesstype,
+  String versionid
+) as owning VersionControls
+{
+  Description: '鑾峰彇鏌愪簨涓氶儴鐩墠鏈�鏂扮殑鐗堟湰鍙�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    latestversion := selectset( globalotdtable, VersionControl, version, version.BusinessType()=businesstype and version.IsReleased()=true and version.VersionID().FindString( versionid, 0 ) = 0 );
+    
+    return &latestversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl b/_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl
new file mode 100644
index 0000000..03b2084
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetVersionInfo (
+  GlobalOTDTable owner,
+  String businessname
+) as owning Strings
+{
+  Description: '鑾峰彇澶х増鏈増鏈彿鍙婄増鏈悕绉�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    businesstyoe := GlobalOTDTable::GetBusinessTypeName( businessname );
+    result := construct( Strings );
+    rootversion := VersionControl::FindLatestVersion( owner, businesstyoe );
+    
+    if( not isnull( rootversion ) ){
+      result.Add( rootversion.VersionID() );
+      result.Add( rootversion.LongVersionName() );
+      result.Add( rootversion.VersionID() + "-" + rootversion.CalType() );
+      result.Add( rootversion.SingleVersionName() );
+      }else{
+        result.Add( "" );
+        result.Add( "" );
+        result.Add( "" );
+        result.Add( "" );
+        }
+    
+    return &result;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_ReleaseLatestVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseLatestVersion.qbl
new file mode 100644
index 0000000..43541f1
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseLatestVersion.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReleaseLatestVersion
+{
+  Description: '鍙戝竷褰撳墠鐗堟湰锛屽緟缂栧啓'
+  TextBody:
+  [*
+    // Administrator Sep-14-2023 (created)
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl
new file mode 100644
index 0000000..f90a939
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReleaseNewVersion (
+  GlobalOTDTable owner,
+  String businesstype
+)
+{
+  Description: '鍙戝竷鏂扮増鏈�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    releasetime := DateTime::ActualTime();
+    
+    // Create new version
+    newversion := VersionControl::CreateNewVersion( owner, businesstype );
+    
+    newversion.IsReleased( true );
+    newversion.ReleaseTime( releasetime );
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl b/_Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl
new file mode 100644
index 0000000..8064a9d
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type VersionControl
+{
+  #keys: '5[412960.0.134860003][412960.0.134860001][0.0.0][412960.0.134860002][412960.0.134860004]'
+  BaseType: Object
+  Description: '鍌ㄥ瓨鍏ㄩ噺鐗堟湰鐘舵�佺殑object'
+  StructuredName: 'VersionControls'
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl b/_Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl
new file mode 100644
index 0000000..877b0b7
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessName
+{
+  #keys: '3[412960.0.134830239][412960.0.134830238][412960.0.134830240]'
+  Description: '灞曠ず鐢ㄤ簨涓氶儴鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl b/_Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..bba8e24
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[412960.0.134830072][412960.0.134830071][412960.0.134830073]'
+  Description: '浜嬩笟閮ㄥ悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl b/_Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl
new file mode 100644
index 0000000..9c76657
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastReleaseTime
+{
+  #keys: '3[412960.0.136138799][412960.0.136138798][412960.0.136138800]'
+  Description: '鏈�鍚庡悓姝ョ殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_LastUser.qbl b/_Main/BL/Type_VersionStatus/Attribute_LastUser.qbl
new file mode 100644
index 0000000..e0f1ac0
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_LastUser.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastUser
+{
+  #keys: '3[412960.0.136138809][412960.0.136138808][412960.0.136138810]'
+  Description: '鏈�鍚庢搷浣滀汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl b/_Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl
new file mode 100644
index 0000000..83a20e1
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastVersionName
+{
+  #keys: '3[412960.0.136138768][412960.0.136138767][412960.0.136138769]'
+  Description: '鏈�缁堟嫾鎺ヨ�屾垚鐨勭増鏈悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_Notes.qbl b/_Main/BL/Type_VersionStatus/Attribute_Notes.qbl
new file mode 100644
index 0000000..ac77f08
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_Notes.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[412960.0.136138819][412960.0.136138818][412960.0.136138820]'
+  Description: '澶囨敞'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl b/_Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl
new file mode 100644
index 0000000..29f8260
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SortNumber
+{
+  #keys: '3[412960.0.136138758][412960.0.136138757][412960.0.136138759]'
+  Description: '搴忓彿'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl
new file mode 100644
index 0000000..a33f467
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateOrUpdate (
+  GlobalOTDTable owner,
+  String businesstype,
+  String businessname,
+  DateTime lastreleasetime,
+  String lastuser,
+  String lastversionname,
+  String notes,
+  Number sortnumber
+)
+{
+  Description: '鍒涘缓鏂扮殑鐗堟湰鍙戝竷鐘舵��'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    // Find exist status
+    existstatus := VersionStatus::FindLatestStatus( owner, businesstype );
+    if( isnull( existstatus ) ){
+      owner.VersionStatus( relnew, 
+                          BusinessType := businesstype, 
+                          BusinessName := businessname, 
+                          LastReleaseTime := lastreleasetime, 
+                          LastUser := lastuser, 
+                          LastVersionName := lastversionname, 
+                          Notes := notes, 
+                          SortNumber := sortnumber );
+      }else{
+        existstatus.LastReleaseTime( lastreleasetime );
+        existstatus.LastUser( lastuser );
+        existstatus.LastVersionName( lastversionname );
+        existstatus.Notes( notes );
+        existstatus.SortNumber( sortnumber );
+        }
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl
new file mode 100644
index 0000000..5a58dc6
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindLatestStatus (
+  GlobalOTDTable globalotdtable,
+  String businesstype
+) as VersionStatus
+{
+  Description: '鑾峰彇鏌愪簨涓氶儴鐩墠鏈�鏂扮殑鍙戝竷鐘舵��'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    lateststatus := select( globalotdtable, VersionStatus, version, version.BusinessType()=businesstype );
+    
+    return lateststatus;
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl
new file mode 100644
index 0000000..dec4ba1
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl
@@ -0,0 +1,64 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBusinessTypeStatus (
+  GlobalOTDTable owner,
+  String rootversionid
+)
+{
+  Description: '鍒锋柊鎵�鏈変簨涓氶儴鐨勫彂甯冩儏鍐�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    // Get business type list 
+    businesstypes := "闆嗗洟,闈㈡澘,鎵嬫満浜嬩笟閮�,IT浜嬩笟閮�,杞﹁浇浜嬩笟閮�,姹借溅鐢靛瓙浜嬩笟閮�,涓撴樉浜嬩笟閮�,绌挎埓浜嬩笟閮�";
+    businesstypelist := businesstypes.Tokenize( "," );
+    
+    sortnumber := 0;
+    sortdetailnumber := 0;
+    traverse( businesstypelist, Elements, businessname, true ){
+    //  info( businessname );
+      // Get the local scenario businesstype
+      businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+      sortnumber := sortnumber + 1;
+      lastversion := VersionControl::FindLatestUpdateVersion( owner, businesstype );
+      if( not isnull( lastversion ) ){
+        VersionStatus::CreateOrUpdate( owner, 
+                                       businesstype, 
+                                       businessname, 
+                                       lastversion.ReleaseTime(), 
+                                       lastversion.User(), 
+                                       lastversion.SingleVersionName(), 
+                                       lastversion.Notes(), 
+                                       sortnumber );
+        }else{
+          existstatus := VersionStatus::FindLatestStatus( owner, businesstype );
+          if( isnull( existstatus ) ){
+            owner.VersionStatus( relnew, 
+                                 BusinessType := businesstype,
+                                 BusinessName := businessname, 
+                                 SortNumber := sortnumber
+                                  );
+            }
+          }
+        
+        rootstatus := VersionStatus::FindLatestStatus( owner, businesstype );
+        // Get the versions list
+        versionlist := VersionControl::FindReleasedVersions( owner, businesstype, rootversionid );
+    //    info( rootversionid );
+        if( not isnull( versionlist ) ){
+          traverse( versionlist, Elements, version, true ){
+            info( version.VersionID() );
+            sortdetailnumber := sortdetailnumber + 1;
+            VersionStatusDetail::CreateOrUpdate( rootstatus,
+                                                 version.VersionID() + "-" + version.CalType(), 
+                                                 version.CreateTime(),
+                                                 version.ReleaseTime(), 
+                                                 version.SingleVersionName(), 
+                                                 version.User(), 
+                                                 version.Notes(), 
+                                                 sortdetailnumber );
+            }
+          }
+      }
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl b/_Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl
new file mode 100644
index 0000000..eb167dc
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type VersionStatus
+{
+  #keys: '5[412960.0.134830053][412960.0.134830051][0.0.0][412960.0.134830052][412960.0.134830054]'
+  BaseType: Object
+  Description: '鍚勪簨涓氶儴鐨勭増鏈彂甯冪姸鎬佹暟鎹�'
+  StructuredName: 'VersionStatuss'
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl
new file mode 100644
index 0000000..6fbf202
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateTime
+{
+  #keys: '3[412960.0.143214324][412960.0.143214323][412960.0.143214325]'
+  Description: '鍒涘缓璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl
new file mode 100644
index 0000000..9c73a1a
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[412960.0.143214333][412960.0.143214332][412960.0.143214334]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl
new file mode 100644
index 0000000..0558ae9
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReleaseTime
+{
+  #keys: '3[412960.0.143214336][412960.0.143214335][412960.0.143214337]'
+  Description: '鍙戝竷璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl
new file mode 100644
index 0000000..f4bcfc5
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SingleVersionName
+{
+  #keys: '3[412960.0.143214339][412960.0.143214338][412960.0.143214340]'
+  Description: '鍗曚釜鐗堟湰鐨勫悕瀛楋紝鍗冲皬鐗堟湰鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl
new file mode 100644
index 0000000..796a03e
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SortNumber
+{
+  #keys: '3[412960.0.143220022][412960.0.143220021][412960.0.143220023]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_User.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_User.qbl
new file mode 100644
index 0000000..14f56cd
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_User.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute User
+{
+  #keys: '3[412960.0.143214342][412960.0.143214341][412960.0.143214343]'
+  Description: '鍒涘缓璇ョ増鏈殑鐢ㄦ埛'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl
new file mode 100644
index 0000000..7b4634c
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionID
+{
+  #keys: '3[412960.0.143214345][412960.0.143214344][412960.0.143214346]'
+  Description: '鍏ㄩ噺鐗堟湰鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl b/_Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl
new file mode 100644
index 0000000..cc97344
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Notes
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl b/_Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl
new file mode 100644
index 0000000..b8282a9
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SingleVersionName
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl b/_Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl
new file mode 100644
index 0000000..10b59e9
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: User
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl
new file mode 100644
index 0000000..2f27674
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateOrUpdate (
+  VersionStatus owner,
+  String versionid,
+  DateTime createtime,
+  DateTime releasetime,
+  String versionname,
+  String user,
+  String notes,
+  Number sortnumber
+)
+{
+  Description: '鍒涘缓鏂扮殑鐗堟湰鍙戝竷鐘舵�佽鎯�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    // Find exist status
+    existstatusdetail := VersionStatusDetail::FindStatus(  owner, versionid );
+    if( isnull( existstatusdetail ) ){
+      owner.VersionStatusDetail( relnew, 
+                                CreateTime := createtime, 
+                                ReleaseTime := releasetime, 
+                                SingleVersionName := versionname, 
+                                User := user, 
+                                VersionID := versionid, 
+                                Notes := notes, 
+                                SortNumber := sortnumber );
+      }else{
+        existstatusdetail.CreateTime( createtime );
+        existstatusdetail.ReleaseTime( releasetime );
+        existstatusdetail.SingleVersionName( versionname );
+        existstatusdetail.User( user );
+        existstatusdetail.Notes( notes );
+        existstatusdetail.SortNumber( sortnumber );
+        }
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl b/_Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl
new file mode 100644
index 0000000..732af48
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindStatus (
+  VersionStatus owner,
+  String versionid
+) as VersionStatusDetail
+{
+  Description: '閫氳繃鐗堟湰鍙锋煡鎵炬槸鍚︽湁瀛樺湪鐨勭姸鎬佽鎯�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    lateststatusdetail := select( owner, VersionStatusDetail, version, version.VersionID()=versionid );
+    
+    return lateststatusdetail;
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl b/_Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl
new file mode 100644
index 0000000..acb76c0
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFullVersionID (
+  VersionStatus owner
+) as String
+{
+  Description: '鑾峰彇鍏ㄩ噺鐗堟湰鍙�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    result := "";
+    latestversion := maxselect( owner, VersionStatusDetail, version, true, version.CreateTime() );
+    
+    if( not isnull( latestversion ) ){
+      result := latestversion.VersionID();
+        }
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl b/_Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl
new file mode 100644
index 0000000..4b4532a
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type VersionStatusDetail
+{
+  #keys: '5[412960.0.143214315][412960.0.143214313][0.0.0][412960.0.143214314][412960.0.143214316]'
+  BaseType: Object
+  Description: '鍌ㄥ瓨瀵瑰簲鍙戝竷鐘舵�佷笅鐗堟湰鐘舵�佺殑鏁版嵁'
+  StructuredName: 'VersionStatusDetails'
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
index 13a5531..f8a1684 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
@@ -51,5 +51,16 @@
         Taborder: 4
       ]
     }
+    Component CheckboxIsCreateNewVersion
+    {
+      #keys: '[412960.0.157150313]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.IsCreateNewVersion'
+        Label: 'Create a new version'
+        Taborder: 7
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_pnlActions.def
new file mode 100644
index 0000000..61bc669
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_pnlActions.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component pnlActions #extension
+{
+  Children:
+  [
+    Component btnOK #extension
+    {
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario\043549.def"
index cc2b308..2f95d09 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario\043549.def"
@@ -20,6 +20,7 @@
     DataHolderActionCopy.Data( false );
     DataHolderDialogData.Data( &scenario );
     DataHolderDialogData.Data().EnableSync( enableSync );
+    DataHolderDialogData.Data().IsCreateNewVersion( true );
     
     ApplicationMacroPlanner.ShowFormModal( this );
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario.def
index d48922f..ad05250 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_NewScenario.def
@@ -19,6 +19,7 @@
     
     DataHolderActionCopy.Data( false );
     DataHolderDialogData.Data( &scenario );
+    DataHolderDialogData.Data().IsCreateNewVersion( true );
     
     ApplicationMacroPlanner.ShowFormModal( this );
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
index e97d405..5d283ea 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -17,6 +17,21 @@
     newscenario := null( Scenario );
     strategy := null( Strategy );
     
+    // New version
+    globalotdtable := GlobalOTDTable;
+    testbusinesstype := "闆嗗洟";
+    if( data.IsCreateNewVersion() ){
+      VersionControl::CreateNewSceneVersion( globalotdtable, testbusinesstype );
+      }else{
+        VersionControl::CopyVersion( globalotdtable, testbusinesstype );
+        }
+    versionname := VersionControl::GetVersionInfo( globalotdtable, testbusinesstype ).Element( 3 );
+    
+    // Get Version Name
+    if( data.Name() = "" ){
+      data.Name( versionname );
+      }
+    
     // Copy scenario
     if( isnull( data.WrappedInstance() ) )
     {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..e56830c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOK
+Response OnClick () id:Response_pnlActions_btnOK_OnClick #extension
+{
+  Precondition:
+  [*
+    data := DataHolderDialogData.Data();
+    return not isnull( data )
+           and Scenario::ValidateInput( feedback,
+                                        ScenarioManager,
+    //                                    edtName.Text(),
+                                        "for version", 
+                                        data.WrappedInstance(),
+                                        '',
+                                        GlobalParameters_MP::GetKB_New(),
+                                        'Test',
+                                        RadioButtonGroupStorageState.BoundValue(),
+                                        Domain.MDSStorageDefinitionManager().Enabled(),
+                                        Domain.MDSStorageDefinitionManager().DatasetStoreEnabled(),
+                                        Domain.MDSStorageDefinitionManager().DatabaseEnabled() );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/_ROOT_Component_DialogCreateEditScenario.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/_ROOT_Component_DialogCreateEditScenario.def
index c446fac..c7bba6d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/_ROOT_Component_DialogCreateEditScenario.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/_ROOT_Component_DialogCreateEditScenario.def
@@ -6,5 +6,6 @@
   Children:
   [
     #child: pnlContent
+    #child: pnlActions
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlActions.def
new file mode 100644
index 0000000..c68f389
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414382.0.465983522]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414382.0.465983526]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414382.0.465983528]'
+      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_DialogEditPriorityFactor/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlContent.def
new file mode 100644
index 0000000..d907ade
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlContent.def
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414382.0.465983520]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component PriorityFactorName
+    {
+      #keys: '[414382.0.464432096]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactor.Data.Name'
+        Label: '浼樺厛绾у洜瀛�'
+        ReadOnly: true
+        Taborder: 0
+      ]
+    }
+    Component Coefficient
+    {
+      #keys: '[414382.0.466405102]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactor.Data.Coefficient'
+        Label: '绯绘暟'
+        Taborder: 1
+      ]
+    }
+    Component Desc
+    {
+      #keys: '[414382.0.466436612]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactor.Data.Desc'
+        Label: '鎻忚堪'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def
new file mode 100644
index 0000000..cb1792b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOK () id:Method_DialogEditPriorityFactor_ClickBtnOK
+{
+  #keys: '[414382.0.464433014]'
+  Body:
+  [*
+    
+    btnOk.Enabled(false,'');
+    
+    // OnOk
+    this.ApplyChanges();
+    DataHolderEditPriorityFactor.Data().Commit();
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_Edit.def
new file mode 100644
index 0000000..94a80fb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_Edit.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  PriorityFactor selection
+) id:Method_DialogEditPriorityFactor_Edit
+{
+  #keys: '[414382.0.464432484]'
+  Body:
+  [*
+    data := shadow( selection );
+    
+    DataHolderEditPriorityFactor.Data( &data);
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..fe3f319
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/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: '[414382.0.465983532]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..ba900bc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414382.0.465983531]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    feedback := Translations::FilllingCapacity_ValidateInput();
+    
+    checkValue := not Coefficient.Text() = ''
+    
+    return checkValue;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOK();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/_ROOT_Component_DialogEditPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/_ROOT_Component_DialogEditPriorityFactor.def
new file mode 100644
index 0000000..c38af58
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/_ROOT_Component_DialogEditPriorityFactor.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogEditPriorityFactor
+{
+  #keys: '[414382.0.465983518]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderEditPriorityFactor
+    {
+      #keys: '[414382.0.464433280]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[PriorityFactor]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: '缂栬緫浼樺厛绾у洜瀛�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlActions.def
new file mode 100644
index 0000000..3fb1dc5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414382.0.482374521]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414382.0.482374525]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414382.0.482374527]'
+      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_DialogEditPriorityFactorDetails/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def
new file mode 100644
index 0000000..1a52538
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def
@@ -0,0 +1,93 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414382.0.482374519]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component GradeTarget
+    {
+      #keys: '[414382.0.482496232]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradeTarget'
+        Label: '鍒嗙骇鐩爣鍊�'
+        Taborder: 2
+      ]
+    }
+    Component isRange
+    {
+      #keys: '[414382.0.482496334]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.IsRange'
+        Label: '鍒嗙骇鑼冨洿:'
+        Taborder: 3
+      ]
+    }
+    Component RangeMax
+    {
+      #keys: '[414382.0.482496364]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMax'
+        Label: '鏈�澶у��'
+        Taborder: 4
+      ]
+    }
+    Component RangeMin
+    {
+      #keys: '[414382.0.482496434]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMin'
+        Label: '鏈�灏忓��'
+        Taborder: 5
+      ]
+    }
+    Component GradeDesc
+    {
+      #keys: '[414382.0.478492133]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradeDesc'
+        FixedSize: false
+        Label: '鎻忚堪'
+        SizeRatio: 3
+        Taborder: 6
+      ]
+    }
+    Component PriorityFactorName
+    {
+      #keys: '[414382.0.485983642]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.PriorityFactorName'
+        Label: '浼樺厛绾у洜瀛�'
+        Taborder: 0
+      ]
+    }
+    Component PriorityFactorDetailsName
+    {
+      #keys: '[414382.0.486013052]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradingName'
+        Label: '缁嗗垎鍚嶇О'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def
new file mode 100644
index 0000000..2fa33f1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOK () id:Method_DialogEditPriorityFactorDetails_ClickBtnOK
+{
+  #keys: '[414382.0.482495783]'
+  Body:
+  [*
+    btnOk.Enabled(false,'');
+    
+    // OnOk
+    this.ApplyChanges();
+    DataHolderEditPriorityFactorDetails.Data().Commit();
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def
new file mode 100644
index 0000000..512f652
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  PriorityFactorDetails selection
+) id:Method_DialogEditPriorityFactorDetails_Edit
+{
+  #keys: '[414382.0.482495781]'
+  Body:
+  [*
+    data := shadow( selection );
+    
+    if( data.IsRange() )
+    {
+        isRange.Checked(true);
+    }
+    
+    DataHolderEditPriorityFactorDetails.Data( &data);
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..793b528
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/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: '[414382.0.482374531]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..14d65cd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414382.0.482374530]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    feedback := Translations::FilllingCapacity_ValidateInput();
+    
+    checkValue := not GradeTarget.Text() = ''
+    
+    if( isRange.Checked() )
+    {
+       checkValue := not RangeMax.Text() = '' and not RangeMin.Text() = '';
+    }
+    
+    return checkValue;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOK();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def
new file mode 100644
index 0000000..91202b9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: pnlContent/isRange
+Response OnChanged () id:Response_pnlContent_isRange_OnChanged
+{
+  #keys: '[414382.0.487732097]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( this.Checked())
+      {
+          RangeMax.ReadOnly(false);
+          RangeMin.ReadOnly(false) 
+      }
+      else{
+          RangeMax.ReadOnly(true);
+          RangeMin.ReadOnly(true) 
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def
new file mode 100644
index 0000000..3668b68
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogEditPriorityFactorDetails
+{
+  #keys: '[414382.0.482374517]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderEditPriorityFactorDetails
+    {
+      #keys: '[414382.0.482495927]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[PriorityFactorDetails]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: '缂栬緫浼樺厛绾у洜瀛愮粏鍒�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
index cd0fc2c..58589ca 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
@@ -9,6 +9,7 @@
   [*
     
     data := owner.FillingCapacityOrder(relshadow);
+    data.OrderType("Pulling")
     
     DataHolderFillingCapacityOrder.Data(&data);
     
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
index 87cbc8c..732c296 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
@@ -4,12 +4,23 @@
 {
   #keys: '[414382.0.400131334]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
+  Precondition:
+  [*
+    feedback := Translations::FilllingCapacity_ValidateInput();
+    
+    checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
+                  and not dropDownStringListStockPointID.Text() = '' and dropDownStringListCustomer.Text() = ''
+                  and not edtQuantity.Text() = '' and dropDownStringListUnitOfMeasureName.Text() = ''
+                  and not edtSalesAmount.Text() = ''
+    
+    return checkValue;
+  *]
   QuillAction
   {
     Body:
     [*
       Form.ClickBtnOk()
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsDemandDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsDemandDate_OnCreated.def
new file mode 100644
index 0000000..97834ff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsDemandDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlContent/dsDemandDate
+Response OnCreated () id:Response_pnlContent_dsDemandDate_OnCreated
+{
+  #keys: '[414382.0.469810579]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Date(Date::Today());
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsForecastDemandDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsForecastDemandDate_OnCreated.def
new file mode 100644
index 0000000..291ccff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlContent_dsForecastDemandDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlContent/dsForecastDemandDate
+Response OnCreated () id:Response_pnlContent_dsForecastDemandDate_OnCreated
+{
+  #keys: '[414382.0.471003983]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Date(Date::Today());
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def
index 99073e6..488be7e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def
@@ -60,7 +60,6 @@
       Properties:
       [
         DataBinding: 'DataHolderFilling.Data.DemandDate'
-        Enabled: false
         Label: 'Demand Date'
         ReadOnly: true
         Taborder: 4
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def
index ca39440..4a485e4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def
@@ -4,12 +4,19 @@
 {
   #keys: '[414382.0.415331003]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
+  Precondition:
+  [*
+    verNo := efVerNo.Text();
+    salesAmount := edtSalesAmount.Text();
+    feedback := Translations::FilllingCapacity_ValidateInput();
+    return not salesAmount = '' and not verNo = '';
+  *]
   QuillAction
   {
     Body:
     [*
       Form.ClickBtnOk();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlContent_dsForecastDemandDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlContent_dsForecastDemandDate_OnCreated.def
new file mode 100644
index 0000000..ee58c75
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlContent_dsForecastDemandDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlContent/dsForecastDemandDate_515
+Response OnCreated () id:Response_pnlContent_dsForecastDemandDate_OnCreated
+{
+  #keys: '[414382.0.470910420]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Date(Date::Today());
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnCancel_OnClick.def
index dbe627b..127f917 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnCancel_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnCancel_OnClick.def
@@ -4,12 +4,12 @@
 {
   #keys: '[414382.0.423200508]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
       Form.Close();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnOk_OnClick.def
index 855c43b..48f21ea 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingOrderScheme/Response_pnlActions_btnOk_OnClick.def
@@ -4,7 +4,12 @@
 {
   #keys: '[414382.0.423200507]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
+  Precondition:
+  [*
+    schemeName := DialogFillingOrderScheme.efSchemeName().Text();
+    feedback := Translations::FilllingCapacity_ValidateInput();
+    return not schemeName = '';
+  *]
   QuillAction
   {
     Body:
@@ -17,5 +22,6 @@
       
       Form.Close();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Method_New.def
index db4476b..5a00c78 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Method_New.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Method_New.def
@@ -8,6 +8,7 @@
   Body:
   [*
     data := owner.FillingCapacityOrder(relshadow);
+    data.OrderType("NEW");
     DataHolderHistoricalSalesOrder.Data( &data);
     
     ApplicationMacroPlanner.ShowFormModal( this );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def
index 009143e..4c52dcb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def
@@ -5,6 +5,17 @@
   #keys: '[414382.0.391970684]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
   GroupServerCalls: true
+  Precondition:
+  [*
+    feedback := Translations::FilllingCapacity_ValidateInput();
+    
+    checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
+                  and not dropDownStringListStockPointID.Text() = '' and dropDownStringListCustomer.Text() = ''
+                  and not edtQuantity.Text() = '' and dropDownStringListUnitOfMeasureName.Text() = ''
+                  and edtSalesAmount.Text() = ''
+    
+    return checkValue;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlContent_dsOrderDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlContent_dsOrderDate_OnCreated.def
new file mode 100644
index 0000000..32c37f5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlContent_dsOrderDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlContent/dsOrderDate
+Response OnCreated () id:Response_pnlContent_dsOrderDate_OnCreated
+{
+  #keys: '[414382.0.471041775]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Date(Date::Today());
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Component_pnlActions.def
new file mode 100644
index 0000000..a40d8d8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414382.0.489474418]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414382.0.489474422]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '淇濆瓨'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414382.0.489474424]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '鍙栨秷'
+        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_DialogNewPriorityPolicy/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Component_pnlContent.def
new file mode 100644
index 0000000..cb3b22c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Component_pnlContent.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414382.0.489474416]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component PriorityPolicyName
+    {
+      #keys: '[414382.0.489512715]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderNewPriorityPolicy.Data.Name'
+        Label: '浼樺厛绾х瓥鐣ュ悕绉�'
+        Taborder: 0
+      ]
+    }
+    Component PriorityPolicyDesc
+    {
+      #keys: '[414382.0.489474868]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderNewPriorityPolicy.Data.Desc'
+        Label: '鎻忚堪'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def
new file mode 100644
index 0000000..20a11fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOk () id:Method_DialogNewPriorityPolicy_ClickBtnOk
+{
+  #keys: '[414382.0.489694008]'
+  Body:
+  [*
+    // Disabled button to prevent the possibility of multiple firing
+    
+    btnOk.Enabled(true,'11111');
+    
+    // OnOk
+    this.ApplyChanges();
+    
+    DataHolderNewPriorityPolicy.Data().Commit();
+    
+    //if( not isnull( DataHolderForm.Data() ) )
+    //{
+    //  // Access the form, select the new assumption
+    //  DataHolderForm.Data().ListAssumptions().SelectByKey( DataHolderDialogData.Data().WrappedInstance().Key() );
+    //}
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_New.def
new file mode 100644
index 0000000..945cb96
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_New.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  MacroPlan owner,
+  String businessType
+) id:Method_DialogNewPriorityPolicy_New
+{
+  #keys: '[414382.0.489725864]'
+  Body:
+  [*
+    data := owner.PriorityPolicy(relshadow);
+    data.BusinessType(businessType);
+    
+    DataHolderNewPriorityPolicy.Data(&data);
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..c263e61
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/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: '[414382.0.489474428]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..9336d6d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414382.0.489474427]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOk()
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/_ROOT_Component_DialogNewPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/_ROOT_Component_DialogNewPriorityPolicy.def
new file mode 100644
index 0000000..cb8f0bd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/_ROOT_Component_DialogNewPriorityPolicy.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogNewPriorityPolicy
+{
+  #keys: '[414382.0.489474414]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderNewPriorityPolicy
+    {
+      #keys: '[414382.0.489512730]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[PriorityPolicy]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: '娣诲姞浼樺厛绾х瓥鐣�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def
new file mode 100644
index 0000000..b965c94
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def
@@ -0,0 +1,52 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412960.0.149440162]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnApply
+    {
+      #keys: '[412960.0.149440164]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Apply'
+        Taborder: 0
+        Visible: false
+      ]
+    }
+    Component btnOk
+    {
+      #keys: '[412960.0.149440166]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 1
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412960.0.149440168]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 2
+        Visible: false
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def
new file mode 100644
index 0000000..4b48663
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412960.0.149440160]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblContent
+    {
+      #keys: '[412960.0.149330142]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        FixedSize: false
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def
new file mode 100644
index 0000000..c96d6db
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+Method JustShow () id:Method_DialogVersionIDCopy_JustShow
+{
+  #keys: '[412960.0.149561615]'
+  Body:
+  [*
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def
new file mode 100644
index 0000000..0d2dfc5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnApply
+Response OnClick () id:Response_pnlActions_btnApply_OnClick
+{
+  #keys: '[412960.0.149440170]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  Precondition:
+  [*
+    return Form.HasChanges();
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..a410594
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/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: '[412960.0.149440172]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..e7234ce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[412960.0.149440171]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def
new file mode 100644
index 0000000..3a9db4f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogVersionIDCopy
+{
+  #keys: '[412960.0.149440158]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Description: '灞曠ず鍏ㄩ噺鐗堟湰鍙蜂互澶嶅埗'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Image: 'DATA_COPY'
+    Padding: 'false'
+    Title: '鍏ㄩ噺鐗堟湰鍙�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
index a803cba..e0f9eb6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
@@ -34,7 +34,7 @@
       Properties:
       [
         Image: 'THICK_ARROW_DOWN_BLUE'
-        Label: 'Clean & Load'
+        Label: '閲嶆柊鍔犺浇'
         Taborder: 0
       ]
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
index ca3a5f2..6e0a043 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
@@ -8,10 +8,6 @@
   CanBindMultiple: false
   DefinitionID => /ListPRData_844/Responsedef_ListPRData_844_WebMenu_OnClick
   Initiator: 'MenuPrintRequest'
-  Precondition:
-  [*
-    
-  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
index 5a0a69d..0c4edde 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
@@ -5,10 +5,6 @@
   #keys: '[414384.0.859141084]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    
-  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index d67039a..478593e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -11,10 +11,10 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'MPSync'
+        Source: 'MPSync'
         Taborder: 0
-        Transformation: 'CapacityAndSaleBudge'
+        Transformation: 'MappingCapacityAndSaleBudge'
       ]
     }
     #child: listActionBarPageCapacityAndSaleBudge
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Deleted","title":"Deleted","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Deleted"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"OrgCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechnology","title":"DisplayTechnology","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechnology"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LineAndSpec","title":"LineAndSpec","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineAndSpec"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCode","title":"ProductCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfArray","title":"PlaceOfProductionOfArray","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfArray"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfEvaporation","title":"PlaceOfProductionOfEvaporation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfEvaporation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Resolution","title":"Resolution","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Resolution"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfCut","title":"NumberOfCut","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfCut"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfMask","title":"NumberOfMask","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfMask"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth1","title":"CapacityInPCSInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth2","title":"CapacityInPCSInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth3","title":"CapacityInPCSInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth4","title":"CapacityInPCSInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth5","title":"CapacityInPCSInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth6","title":"CapacityInPCSInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth7","title":"CapacityInPCSInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth8","title":"CapacityInPCSInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth9","title":"CapacityInPCSInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth10","title":"CapacityInPCSInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth11","title":"CapacityInPCSInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth12","title":"CapacityInPCSInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSTotal","title":"CapacityInPCSTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth1","title":"CapacityInSheetInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth2","title":"CapacityInSheetInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth3","title":"CapacityInSheetInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth4","title":"CapacityInSheetInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth5","title":"CapacityInSheetInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth6","title":"CapacityInSheetInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth7","title":"CapacityInSheetInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth8","title":"CapacityInSheetInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth9","title":"CapacityInSheetInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth10","title":"CapacityInSheetInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth11","title":"CapacityInSheetInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth12","title":"CapacityInSheetInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetTotal","title":"CapacityInSheetTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth1","title":"SaleAmountInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth2","title":"SaleAmountInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth3","title":"SaleAmountInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth5","title":"SaleAmountInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth4","title":"SaleAmountInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth6","title":"SaleAmountInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth7","title":"SaleAmountInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth8","title":"SaleAmountInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth9","title":"SaleAmountInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth10","title":"SaleAmountInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth11","title":"SaleAmountInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth12","title":"SaleAmountInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountTotal","title":"SaleAmountTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountTotal"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Deleted","title":"Deleted","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Deleted"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"OrgCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechnology","title":"DisplayTechnology","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechnology"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LineAndSpecification","title":"LineAndSpecification","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineAndSpecification"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCode","title":"ProductCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfArray","title":"PlaceOfProductionOfArray","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfArray"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfEvaporation","title":"PlaceOfProductionOfEvaporation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfEvaporation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Resolution","title":"Resolution","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Resolution"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfCut","title":"NumberOfCut","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfCut"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfMask","title":"NumberOfMask","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfMask"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth1","title":"CapacityInPCSInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth2","title":"CapacityInPCSInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth3","title":"CapacityInPCSInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth4","title":"CapacityInPCSInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth5","title":"CapacityInPCSInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth6","title":"CapacityInPCSInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth7","title":"CapacityInPCSInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth8","title":"CapacityInPCSInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth9","title":"CapacityInPCSInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth10","title":"CapacityInPCSInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth11","title":"CapacityInPCSInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth12","title":"CapacityInPCSInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSTotal","title":"CapacityInPCSTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth1","title":"CapacityInSheetInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth2","title":"CapacityInSheetInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth3","title":"CapacityInSheetInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth4","title":"CapacityInSheetInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth5","title":"CapacityInSheetInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth6","title":"CapacityInSheetInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth7","title":"CapacityInSheetInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth8","title":"CapacityInSheetInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth9","title":"CapacityInSheetInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth10","title":"CapacityInSheetInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth11","title":"CapacityInSheetInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth12","title":"CapacityInSheetInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetTotal","title":"CapacityInSheetTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth1","title":"SaleAmountInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth2","title":"SaleAmountInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth3","title":"SaleAmountInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth5","title":"SaleAmountInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth4","title":"SaleAmountInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth6","title":"SaleAmountInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth7","title":"SaleAmountInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth8","title":"SaleAmountInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth9","title":"SaleAmountInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth10","title":"SaleAmountInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth11","title":"SaleAmountInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth12","title":"SaleAmountInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountTotal","title":"SaleAmountTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountTotal"}}]'
         ContextMenu: 'listContextMenuCapacityAndSaleBudge'
         SortCriteria: 'BusinessType;OrgCode;ProductCode'
         Taborder: 2
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
index 99ec0c4..2b3f638 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
@@ -10,6 +10,7 @@
   {
     Body:
     [*
+      MPSync::TestData( MPSync, MacroPlan );
       GlobalOTDTable.InitTestData();
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
index ea33703..51a6e54 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
@@ -11,9 +11,9 @@
     [*
       CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
       
-      DropDownBusinessTypes.Strings( GlobalOTDTable.CapacityAndSaleBudgeBusinessTypeString() );
-      DropDownPlaceOfProductionOfArrays.Strings( GlobalOTDTable.CapacityAndSaleBudgePlaceOfProductionOfArrayString() );
-      DropDownYears.Strings( GlobalOTDTable::CapacityAndSaleBudgeYearsString() );
+      DropDownBusinessTypes.Strings( MPSync.CapacityAndSaleBudgeBusinessTypeString() );
+      DropDownPlaceOfProductionOfArrays.Strings( MPSync.CapacityAndSaleBudgePlaceOfProductionOfArrayString() );
+      DropDownYears.Strings( MPSync::CapacityAndSaleBudgeYearsString() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_ListFillingSchemeDetail.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_ListFillingSchemeDetail.def
index 7023bea..50fe851 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_ListFillingSchemeDetail.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_ListFillingSchemeDetail.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 Component ListFillingSchemeDetail
 {
-  #keys: '[414382.0.434111695]'
+  #keys: '[414382.0.474013892]'
   BaseType: 'WebList'
   Children:
   [
     Component DataExtractorFillingSchemeDetail
     {
-      #keys: '[414382.0.434111696]'
+      #keys: '[414382.0.474013893]'
       BaseType: 'WebDataExtractor'
       Properties:
       [
@@ -20,7 +20,7 @@
     #child: listActionBarPageFillingSchemeDetail
     Component DataSetLevelFillingSchemeDetail
     {
-      #keys: '[414382.0.434111701]'
+      #keys: '[414382.0.474013898]'
       BaseType: 'WebDataSetLevel'
       Children:
       [
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VerNo","title":"鐗堟湰鍙�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VerNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"浜嬩笟閮�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"閿�鍞儴闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"瀹㈡埛鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"鏁伴噺鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelBigSheetQuantity","title":"闈㈡澘澶у紶鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelBigSheetQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesAmount","title":"閿�鍞","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesAmount"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastDemandDate","title":"棰勬祴闇�姹傛椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastDemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandDate","title":"闇�姹傛椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderType","title":"璁㈠崟绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderType"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VerNo","title":"鐗堟湰鍙�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VerNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"鍟嗗搧缂栫爜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"浜嬩笟閮�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"閿�鍞儴闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"瀹㈡埛鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"鏁伴噺鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelBigSheetQuantity","title":"闈㈡澘澶у紶鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelBigSheetQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastDemandDate","title":"棰勬祴闇�姹傛椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastDemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandDate","title":"闇�姹傛椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderType","title":"璁㈠崟绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderType"}}]'
         ContextMenu: 'listContextMenuFillingSchemeDetail'
         Taborder: 2
       ]
@@ -36,6 +36,6 @@
   ]
   Properties:
   [
-    Taborder: 0
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listActionBarPageFillingSchemeDetail.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listActionBarPageFillingSchemeDetail.def
index 25791d7..85c99de 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listActionBarPageFillingSchemeDetail.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listActionBarPageFillingSchemeDetail.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component listActionBarPageFillingSchemeDetail
 {
-  #keys: '[414382.0.434111698]'
+  #keys: '[414382.0.474013895]'
   BaseType: 'listActionBarPage'
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listContextMenuFillingSchemeDetail.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listContextMenuFillingSchemeDetail.def
index 21ba05d..17d4f01 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listContextMenuFillingSchemeDetail.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/Component_listContextMenuFillingSchemeDetail.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component listContextMenuFillingSchemeDetail
 {
-  #keys: '[414382.0.434111703]'
+  #keys: '[414382.0.474013900]'
   BaseType: 'listContextMenu'
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/_ROOT_Component_FormFillingSchemeDetail\043802.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/_ROOT_Component_FormFillingSchemeDetail\043802.def"
index 556ddb8..abd3e72 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/_ROOT_Component_FormFillingSchemeDetail\043802.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder802/_ROOT_Component_FormFillingSchemeDetail\043802.def"
@@ -7,7 +7,6 @@
   BaseType: 'WebForm'
   Children:
   [
-    #child: ListFillingSchemeDetail
     Component DataHolderFillingSchemeDetails id:DataHolderFillingSchemeDetails_71
     {
       #keys: '[414382.0.438570912]'
@@ -30,9 +29,10 @@
       ]
       Properties:
       [
-        Taborder: 1
+        Taborder: 0
       ]
     }
+    #child: ListFillingSchemeDetail
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Component_Menurelease.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Component_Menurelease.def
index db68912..e012d0d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Component_Menurelease.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Component_Menurelease.def
@@ -11,10 +11,22 @@
       BaseType: 'WebMenu'
       Properties:
       [
+        Image: 'GEAR_OK'
         Taborder: 3
         Title: 'Release'
       ]
     }
+    Component MenuDelete
+    {
+      #keys: '[414382.0.475912052]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_DELETE'
+        Taborder: 4
+        Title: '鍒犻櫎'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def
new file mode 100644
index 0000000..fc51ac5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: ListFillingScheme
+Response OnClick (
+  FilllingCapacityOrderScheme selection
+) id:Response_ListFillingScheme_MenuDelete_OnClick
+{
+  #keys: '[414382.0.475970386]'
+  CanBindMultiple: false
+  DefinitionID => /ListFillingScheme/Responsedef_ListFillingScheme_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  Precondition:
+  [*
+    feedback := Translations::FilllingCapacity_NotRelease();
+    checkValue := FilllingCapacityOrderScheme::HasAlreadyRelease( MacroPlan);
+    return checkValue;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete()
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def
index 5d50bdf..0cfb628 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def
@@ -10,7 +10,9 @@
   Initiator: 'MenuRelease'
   Precondition:
   [*
-    not selection.IsRelease();
+    feedback := Translations::FilllingCapacity_NotRelease();
+    checkValue := FilllingCapacityOrderScheme::HasAlreadyRelease( MacroPlan);
+    return checkValue;
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalFillingCapacityOrder/_ROOT_Component_FormHistoricalFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalFillingCapacityOrder/_ROOT_Component_FormHistoricalFillingCapacityOrder.def
index 4562d53..f39ddf8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalFillingCapacityOrder/_ROOT_Component_FormHistoricalFillingCapacityOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalFillingCapacityOrder/_ROOT_Component_FormHistoricalFillingCapacityOrder.def
@@ -11,6 +11,6 @@
   ]
   Properties:
   [
-    Title: '濉骇璁㈠崟鍒楄〃'
+    Title: '濉骇璁㈠崟鍘嗗彶鍒楄〃'
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def"
new file mode 100644
index 0000000..17d2167
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def"
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListOrderLock id:ListOrderLock_844
+{
+  #keys: '[412960.0.217980651]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorOrderLock743
+    {
+      #keys: '[412960.0.217980652]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[CustomerOrder]'
+        Description: '鑾峰彇璁㈠崟'
+        Source: 'DataHolderOrderLock'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPageOrderLock_1
+    Component DataSetLevelOrderLock
+    {
+      #keys: '[412960.0.217980654]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuOrderLock_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsFirmed","title":"IsFirmed","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsFirmed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"First.AsPlanningBaseSalesDemandInPeriod.End","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"First.AsPlanningBaseSalesDemandInPeriod.End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModify","title":"LastModify","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModify"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModifyTime","title":"LastModifyTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModifyTime"}}]'
+        ContextMenu: 'listContextMenuOrderLock'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def"
new file mode 100644
index 0000000..401adf5
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def"
@@ -0,0 +1,210 @@
+Quintiq file version 2.0
+Component MatrixEditorProductPlanning id:MatrixEditorProductPlanning_679
+{
+  #keys: '[412960.0.220270414]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellPISPIP
+    {
+      #keys: '[412960.0.220270415]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorPISPIP
+        {
+          #keys: '[412960.0.220270416]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[ProductInStockingPoint_MP]'
+            FixedFilter: 'not object.ProductInStockingPoint_MP().IsSystem() and object.ProductInStockingPoint_MP().IsLeaf()'
+            Source: 'ApplicationMacroPlanner.DataHolderPISP'
+            Taborder: 0
+            Transformation: 'Elements.ProductInStockingPointInPeriod'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'DisplaySupplyQuantity;DependentDemandAndSalesDemandQuantity;TargetInventoryLevel;InventoryLevelEnd;StockLevelInDays'
+        Column: 'Period_MP'
+        Row: 'ProductInStockingPoint_MP'
+        Taborder: 2
+      ]
+    }
+    Component MatrixEditorRowsPISP
+    {
+      #keys: '[412960.0.220270417]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorPISP
+        {
+          #keys: '[412960.0.220270418]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'CustomerOrder'
+            ExtractionMode: 'Selected'
+            FixedFilter: 'not object.IsSystem() and object.IsLeaf()'
+            Source: 'ListOrderLock'
+            Taborder: 0
+            Transformation: 'ProductInStockingPoint_MP'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Product_MP.DisplayIndex;Name'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorColumnsPeriod
+    {
+      #keys: '[412960.0.220270419]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorPeriod
+        {
+          #keys: '[412960.0.220270420]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[Period_MP]'
+            Source: 'ApplicationMacroPlanner.DataHolderPeriods'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Start'
+        SortCriteria: 'Start'
+        Taborder: 1
+      ]
+    }
+    Component UserConfigurableInformationMatrixEditorProductPlanning
+    {
+      #keys: '[412960.0.220270421]'
+      BaseType: 'WebUserConfigurableInformation'
+      Properties:
+      [
+        Identifier: 'Cell: PISPIP'
+        ObjectType: 'ProductInStockingPointInPeriod'
+        Taborder: 3
+        Text: 'Test text'
+        Tooltip: '<table><tr><td><b>SYNONYM(object.InventoryLevelEnd())</b></td><td>VALUE( MacroPlan::GetDisplayValue( object.InventoryLevelEnd() ) )</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td><b>Inventory holding cost </b></td><td>VALUE(object.TotalBaseInventoryHoldingCost())VALUE( \' \'+ object.ProductInStockingPoint_MP().StockingPoint_MP().Currency_MP().Symbol() )</td><td>VALUE( \'[\' + object.TotalBaseInventoryHoldingCostPerQuantity().Format(\'N(Dec(2))\') )</td><td>VALUE( object.ProductInStockingPoint_MP().StockingPoint_MP().Currency_MP().Symbol()  + \'/\' + object.ProductInStockingPoint_MP().UnitOfMeasure_MP().Name() + \']\' )  </td></tr><tr><td><b>SYNONYM(object.StockLevelInDays())</b></td><td>VALUE(object.StockLevelInDays)</td><td>day</td></tr><tr><td><b>Total supply </b></td><td>VALUE(object.SupplyQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Total demand </b></td><td>VALUE(object.GetDemandQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr><br><tr><td><b>Inventory start </b></td><td>VALUE( guard( MacroPlan::GetDisplayValue( object.InventoryLevelStartPISPIP().InventoryLevelEnd() ), 0.0 ) )</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Sales demand </b></td><td>VALUE(object.SalesDemandQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr><tr><td><b>New supply </b></td><td>VALUE(object.NewSupplyQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Dependent demand </b></td><td>VALUE(object.DependentDemandQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr><tr><td><b>Inventory supply </b></td><td>VALUE(object.InventorySupplyQuantity())</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td><td/><td><b>Fulfilled demand </b></td><td>VALUE(object.FulfilledDemandQuantity() )</td><td>VALUE(object.ProductInStockingPoint_MP().UnitOfMeasureName())</td></tr></table><hr>VALUE( object.ImgHasFeedback() ) VALUE(  ifexpr( object.HasFeedback() , " Feedback message exist. Refer to Supply Planning matrix for details."  , "" )  )'
+      ]
+    }
+    #child: matrixEditorActionBarPageProductPlanning_1
+    #child: matrixeditorContextMenuProductPlanning_1
+  ]
+  Properties:
+  [
+    AllowAttributeConfiguration: true
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumnsPeriod'
+    ContextMenu: 'matrixeditorContextMenuProductPlanning'
+    Rows: 'MatrixEditorRowsPISP'
+    ShowEditability: true
+    ShowSingleAttribute: true
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick
+    {
+      #keys: '[412960.0.220270401]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[6763.0.7990336]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebButton_OnClick
+    {
+      #keys: '[412960.0.220270400]'
+      Initiator: 'WebButton'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[6763.0.7990409]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick_119
+    {
+      #keys: '[412960.0.220270399]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedrows
+        {
+          #keys: '[6763.0.7990482]'
+          Binding: 'this.SelectedRows()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebButton_OnClick_720
+    {
+      #keys: '[412960.0.220270398]'
+      Initiator: 'WebButton'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedrows
+        {
+          #keys: '[6763.0.7990555]'
+          Binding: 'this.SelectedRows()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick_640
+    {
+      #keys: '[412960.0.220270397]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedcolumns
+        {
+          #keys: '[6763.0.7990628]'
+          Binding: 'this.SelectedColumns()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorProductPlanning_679_WebButton_OnClick_582
+    {
+      #keys: '[412960.0.220270396]'
+      Initiator: 'WebButton'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selectedcolumns
+        {
+          #keys: '[6763.0.7990701]'
+          Binding: 'this.SelectedColumns()'
+        }
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix\043780.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix\043780.def"
new file mode 100644
index 0000000..3aee833
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelMatrix\043780.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMatrix id:PanelMatrix_780
+{
+  #keys: '[412960.0.220270412]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component DataHolderSelectedPISPIPsInProductPlanningMatrix
+    {
+      #keys: '[412960.0.220270413]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductInStockingPointInPeriod]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: MatrixEditorProductPlanning_679
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def
new file mode 100644
index 0000000..8565401
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLock.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelOrderLock
+{
+  #keys: '[412960.0.212571359]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelOrderLockHeader_545
+    #child: PanelOrderLockOrder
+    #child: PanelOrderLockPlanning
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader\043545.def"
new file mode 100644
index 0000000..4ff0600
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader\043545.def"
@@ -0,0 +1,125 @@
+Quintiq file version 2.0
+Component PanelOrderLockHeader id:PanelOrderLockHeader_545
+{
+  #keys: '[412960.0.212571440]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelOrderLockHeaderVersion
+    {
+      #keys: '[412960.0.212571441]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Description: 'MPS鐗堟湰鍚嶇О'
+        Label: 'MPS鐗堟湰锛�'
+        Taborder: 0
+      ]
+    }
+    Component EditFieldOrderLockHeader
+    {
+      #keys: '[412960.0.212571468]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Description: '妯$硦鎼滅储绛涢�夋'
+        PlaceHolder: '妯$硦鎼滅储'
+        Taborder: 1
+      ]
+    }
+    Component DateSelectorOrderLockHeaderCustomerOrder
+    {
+      #keys: '[412960.0.212571527]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 2023-01-01
+        Description: '瀹㈡埛闇�姹傛椂闂�'
+        Label: '瀹㈡埛闇�姹傛椂闂�'
+        Taborder: 3
+      ]
+    }
+    Component DateSelectorOrderLockHeaderPlanDeliver
+    {
+      #keys: '[412960.0.212571611]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 2023-01-01
+        Description: '璁″垝浜や粯鏃堕棿'
+        Label: '璁″垝浜や粯鏃堕棿'
+        Taborder: 4
+      ]
+    }
+    Component ButtonOrderLockHeader
+    {
+      #keys: '[412960.0.212571669]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '妯$硦鎼滅储鎸夐挳'
+        Label: '鎼滅储'
+        Taborder: 2
+      ]
+    }
+    Component RadioButtonGroupOrderLockHeader
+    {
+      #keys: '[412960.0.212571696]'
+      BaseType: 'WebRadioButtonGroup'
+      Properties:
+      [
+        BoundValue: 'all'
+        ButtonLabels: '宸查攣瀹�;鏈攣瀹�;鍏ㄩ儴'
+        ButtonValues: 'locked;unlocked;all'
+        DataBinding: 'DataHolderOrderLockGlobal.Data.IsOrderLocked'
+        Description: '鏄惁閿佸畾鐨勭偣閫夋'
+        Orientation: 'horizontal'
+        Taborder: 5
+      ]
+    }
+    Component ButtonOrderLockHeaderLock
+    {
+      #keys: '[412960.0.221760476]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '璁㈠崟閿佸畾'
+        Label: '閿佸畾'
+        Taborder: 7
+      ]
+    }
+    Component ButtonOrderLockHeaderUnlock
+    {
+      #keys: '[412960.0.221760488]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '璁㈠崟瑙i攣'
+        Label: '瑙i攣'
+        Taborder: 8
+      ]
+    }
+    Component ButtonOrderLockHeaderClear
+    {
+      #keys: '[412960.0.223264324]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '娓呴櫎绛涢�夐」'
+        Label: '娓呴櫎绛涢��'
+        Taborder: 6
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '鏀剧疆lable锛屾寜閽瓑'
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def
new file mode 100644
index 0000000..3a8891a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockOrder.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelOrderLockOrder
+{
+  #keys: '[412960.0.217980613]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOrderLock_844
+  ]
+  Properties:
+  [
+    Description: '璁㈠崟淇℃伅灞曠ず'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def
new file mode 100644
index 0000000..e908a3c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockPlanning.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+Component PanelOrderLockPlanning
+{
+  #keys: '[412960.0.220270252]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelMatrix_780
+  ]
+  Properties:
+  [
+    Border: true
+    Description: '璁㈠崟瀵瑰簲鐨勮鍒掓暟鎹�'
+    Taborder: 2
+    Title: '璁″垝璇︽儏'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock\0431.def"
new file mode 100644
index 0000000..a529251
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listActionBarPageOrderLock\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageOrderLock id:listActionBarPageOrderLock_1
+{
+  #keys: '[412960.0.217980653]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock\0431.def"
new file mode 100644
index 0000000..bc2e00d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_listContextMenuOrderLock\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuOrderLock id:listContextMenuOrderLock_1
+{
+  #keys: '[412960.0.217980655]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning\0431.def"
new file mode 100644
index 0000000..4e41b90
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixEditorActionBarPageProductPlanning\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageProductPlanning id:matrixEditorActionBarPageProductPlanning_1
+{
+  #keys: '[412960.0.220270422]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 5
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning\0431.def"
new file mode 100644
index 0000000..79d4472
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_matrixeditorContextMenuProductPlanning\0431.def"
@@ -0,0 +1,57 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuProductPlanning id:matrixeditorContextMenuProductPlanning_1
+{
+  #keys: '[412960.0.220270423]'
+  BaseType: 'matrixeditorContextMenu'
+  Children:
+  [
+    Component MenuCopy
+    {
+      #keys: '[138034.3.1296123318]'
+      BaseType: 'MenuCopy'
+      IsDerived: true
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component MenuSeparator3
+    {
+      #keys: '[412960.0.220270424]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 1
+      ]
+    }
+    Component MenuLock
+    {
+      #keys: '[412960.0.220270427]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        DelegationID: 'ActionBarPlan_Lock'
+        Image: 'LOCK'
+        Taborder: 3
+        Title: 'Lock'
+      ]
+    }
+    Component MenuUnlock
+    {
+      #keys: '[412960.0.220270428]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        DelegationID: 'ActionBarPlan_Unlock'
+        Image: 'LOCK_OPEN'
+        Taborder: 4
+        Title: 'Unlock'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def
new file mode 100644
index 0000000..38cee0b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuLock_OnClick.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnClick (
+  structured[ProductInStockingPointInPeriod] selection
+) id:Response_MatrixEditorProductPlanning_679_MenuLock_OnClick
+{
+  #keys: '[412960.0.220270410]'
+  CanBindMultiple: false
+  DefinitionID => /MatrixEditorProductPlanning_679/Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick
+  Initiator: 'MenuLock'
+  Precondition:
+  [*
+    return ProductInStockingPointInPeriod::CanLockUnlock( selection, feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // Lock total supply quantity for PISPIPs
+      // This is a workaround, we supposedly set the bindingtype of selection as the subtype, but
+      // the response would have trouble handling multiple cell selection, so for now, we bind the base type
+      // then select the subtype
+      
+      
+      pispipLeafs := selectset( selection, 
+                                Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), 
+                                pispip, 
+                                true );
+      
+      ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, true, true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def
new file mode 100644
index 0000000..7615c08
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnClick (
+  structured[ProductInStockingPointInPeriod] selection
+) id:Response_MatrixEditorProductPlanning_679_MenuUnlock_OnClick
+{
+  #keys: '[412960.0.220270407]'
+  CanBindMultiple: false
+  DefinitionID => /MatrixEditorProductPlanning_679/Responsedef_MatrixEditorProductPlanning_679_WebMenu_OnClick
+  Initiator: 'MenuUnlock'
+  Precondition:
+  [*
+    return ProductInStockingPointInPeriod::CanLockUnlock( selection, feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // Unlock the total supply quantity of pispips
+      // This is a workaround, we supposedly set the bindingtype of selection as the subtype, but
+      // the response would have trouble handling multiple cell selection, so for now, we bind the base type
+      // then select the subtype
+      
+      pispipLeafs := selectset( selection, Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispip, 
+                                true );
+      ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, false, true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def
new file mode 100644
index 0000000..2dea2ca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnCheckEditability.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnCheckEditability (
+  structured[ProductInStockingPointInPeriodPlanning] cell,
+  Real value
+) id:Response_MatrixEditorProductPlanning_679_OnCheckEditability
+{
+  #keys: '[412960.0.220270404]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnCheckEditability'
+  QuillAction
+  {
+    Body:
+    [*
+      //Precondition
+      attributes := construct( Strings );
+      attributes.Add(focusedattribute);
+      isSupply_o := false;
+      feedback :="";
+      
+      cond := MacroPlan.CanPlan( feedback )
+              and ProductInStockingPointInPeriod::CanEnterSupplyQuantity( feedback,
+                                                                          cell,
+                                                                          attributes,
+                                                                          isSupply_o );
+      if( cond )
+      {
+        if( isSupply_o )
+        {
+          periods := selectset( cell, Elements.Period_MP, period, true );
+          cond := ScenarioManager::CanStartSmartPlan( ScenarioManager,
+                                                      DataHolderActiveScenario.Data(),
+                                                      true,
+                                                      periods,
+                                                      feedback );
+        }                                            
+      }
+      editinfo.CanEdit( cond );
+      editinfo.UserHint( feedback );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def
new file mode 100644
index 0000000..d90381f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: MatrixEditorProductPlanning_679
+Response OnUserSelectionChanged (
+  structured[ProductInStockingPointInPeriod] selection
+) id:Response_MatrixEditorProductPlanning_679_OnUserSelectionChanged
+{
+  #keys: '[412960.0.220270402]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //Assign selection to data holder
+      DataHolderSelectedPISPIPsInProductPlanningMatrix.Data( selection.Copy() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def
new file mode 100644
index 0000000..2adc0a4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/ButtonOrderLockHeaderClear
+Response OnClick () id:Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderClear_OnClick
+{
+  #keys: '[412960.0.223264347]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      EditFieldOrderLockHeader.Text( "" );
+      DateSelectorOrderLockHeaderCustomerOrder.Date( Date::Construct(2023,1,1) );
+      DateSelectorOrderLockHeaderPlanDeliver.Date( Date::Construct(2023,1,1) );
+      RadioButtonGroupOrderLockHeader.BoundValue( "all" );
+      DataExtractorOrderLock.FixedFilter( "true" );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def
new file mode 100644
index 0000000..ddeca1c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick.def
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/ButtonOrderLockHeader
+Response OnClick () id:Response_PanelOrderLockHeader_545_ButtonOrderLockHeader_OnClick
+{
+  #keys: '[412960.0.221841965]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      thisfilter := "( object.OrderID().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )"  
+      + " or " + "object.ProductID().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )"  
+      + " or " + "object.UnitOfMeasureName().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )" 
+      + " or " + "object.StockingPointID().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )" 
+      + " or " + "object.CustomerName().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " )" 
+      + " or " + "object.SalesSegmentName().LikeUserLocale( " + EditFieldOrderLockHeader.Text().AsQUILL() + " ) )" ;
+      
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "OrderID()", 0 ) >= 0 ){
+          if( newfilter = "" ){
+            newfilter := thisfilter;
+            }else{
+              newfilter := newfilter + " and " + thisfilter;
+              }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( newfilter = "" ){
+          newfilter := thisfilter;
+          }else{
+            newfilter := newfilter + " and " + thisfilter;
+            }
+        }
+      
+      info( newfilter );
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def
new file mode 100644
index 0000000..5fa0f71
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def
@@ -0,0 +1,51 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/DateSelectorOrderLockHeaderCustomerOrder
+Response OnChanged () id:Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_OnChanged
+{
+  #keys: '[412960.0.221842202]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "EndDate()", 0 ) >= 0 ){
+          if( newfilter = "" ){
+            newfilter := "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+            }else{
+              newfilter := newfilter + " and " + "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+              }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( newfilter = "" ){
+          newfilter := "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+          }else{
+            newfilter := newfilter + " and " + "( object.EndDate() = " + this.Date().AsQUILL() + " )";
+            }
+        }
+      
+      info( newfilter );
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def
new file mode 100644
index 0000000..a5fda9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def
@@ -0,0 +1,51 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/DateSelectorOrderLockHeaderPlanDeliver
+Response OnChanged () id:Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnChanged
+{
+  #keys: '[412960.0.221842649]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "End()", 0 ) >= 0 and filter.FindString( "EndDate()", 0 ) < 0 ){
+          if( newfilter = "" ){
+            newfilter := "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+            }else{
+              newfilter := newfilter + " and " + "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+              }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( newfilter = "" ){
+          newfilter := "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+          }else{
+            newfilter := newfilter + " and " + "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
+            }
+        }
+      
+      info( newfilter );
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def
new file mode 100644
index 0000000..5e6da38
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def
@@ -0,0 +1,69 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/RadioButtonGroupOrderLockHeader
+Response OnChanged () id:Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged
+{
+  #keys: '[412960.0.221843171]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      existfilter := DataExtractorOrderLock.FixedFilter();
+      if( existfilter = "true" ){
+        existfilter := "";
+        }
+      existfilterlist := existfilter.Tokenize( " and " );
+      
+      newfilter := "";
+      findcount := 0;
+      traverse( existfilterlist, Elements, filter ){
+        if( filter.FindString( "IsFirmed()", 0 ) >= 0 ){
+          if( this.BoundValue() = "locked" ){
+            if( newfilter = "" ){
+              newfilter := "( object.IsFirmed() = true )";
+              }else{
+                newfilter := newfilter + " and " + "( object.IsFirmed() = true )";
+                }
+            }else if( this.BoundValue() = "unlocked" ){
+              if( newfilter = "" ){
+                newfilter := "( object.IsFirmed() = false )";
+                }else{
+                  newfilter := newfilter + " and " + "( object.IsFirmed() = false )";
+                  }
+              }else if( this.BoundValue() = "all" ){
+                newfilter := newfilter + "";
+                }
+          findcount := 1;
+          }else{
+            if( newfilter = "" ){
+              newfilter := filter;
+              }else{
+                newfilter := newfilter + " and " + filter;
+                }
+            }
+        }
+      
+      if( findcount = 0 ){
+        if( this.BoundValue() = "locked" ){
+          if( newfilter = "" ){
+            newfilter := "( object.IsFirmed() = true )";
+            }else{
+              newfilter := newfilter + " and " + "( object.IsFirmed() = true )";
+              }
+          }else if( this.BoundValue() = "unlocked" ){
+            if( newfilter = "" ){
+              newfilter := "( object.IsFirmed() = false )";
+              }else{
+                newfilter := newfilter + " and " + "( object.IsFirmed() = false )";
+                }
+            }else if( this.BoundValue() = "all" ){
+              newfilter := newfilter + "";
+              }
+        }
+      
+      DataExtractorOrderLock.FixedFilter( newfilter );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def
new file mode 100644
index 0000000..6834735
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def
@@ -0,0 +1,55 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormOrderLock
+{
+  #keys: '[412960.0.212511678]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelOrderLock
+    Component DataHolderOrderLock
+    {
+      #keys: '[412960.0.212571799]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[CustomerOrder]*'
+      Children:
+      [
+        Component DataExtractorOrderLock
+        {
+          #keys: '[412960.0.212571816]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Description: '鎶藉彇璁㈠崟鏁版嵁'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'SalesDemand.astype(CustomerOrder)'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    Component DataHolderOrderLockGlobal
+    {
+      #keys: '[412960.0.212571897]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[Scenario]*'
+      Properties:
+      [
+        Description: '瀛樺偍鏄惁閿佸畾鐨勭瓫閫夋潯浠�'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '璁㈠崟閿佸畾瑙i攣鐣岄潰'
+    Image: 'DATA_LOCK'
+    Title: '璁㈠崟閿佸畾瑙i攣鐣岄潰'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def
index 5880d9b..73da706 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def
@@ -1,17 +1,17 @@
 Quintiq file version 2.0
 Component ListPriorityFactor
 {
-  #keys: '[414382.0.453382063]'
+  #keys: '[414382.0.479644224]'
   BaseType: 'WebList'
   Children:
   [
     Component DataExtractorPriorityFactor
     {
-      #keys: '[414382.0.453382064]'
+      #keys: '[414382.0.479644225]'
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'structured[PriorityFactorDetails]'
+        DataType: 'structured[PriorityFactor]'
         Source: 'DataHolderPriorityFactorSelect'
         Taborder: 0
         Transformation: 'Elements'
@@ -20,7 +20,7 @@
     #child: listActionBarPagePriorityFactor
     Component DataSetLevelPriorityFactor
     {
-      #keys: '[414382.0.453382069]'
+      #keys: '[414382.0.479644230]'
       BaseType: 'WebDataSetLevel'
       Children:
       [
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorName","title":"PriorityFactorName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"coefficient","title":"coefficient","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"coefficient"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorDesc","title":"PriorityFactorDesc","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorDesc"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Coefficient","title":"绯绘暟","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Coefficient"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Desc","title":"鎻忚堪","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Desc"}}]'
         ContextMenu: 'listContextMenuPriorityFactor'
         Taborder: 2
       ]
@@ -36,13 +36,13 @@
   ]
   Properties:
   [
-    Taborder: 1
+    Taborder: 2
   ]
   ResponseDefinitions:
   [
     DelegatedResponseDefinition OnClick id:Responsedef_ListPriorityFactor_WebMenu_OnClick
     {
-      #keys: '[414382.0.452290439]'
+      #keys: '[414382.0.484095232]'
       Initiator: 'WebMenu'
       IsInherited: false
       ResponseType: 'OnClick'
@@ -50,7 +50,7 @@
       [
         ResponseDefinitionArgument selection
         {
-          #keys: '[1187.0.7063875]'
+          #keys: '[1239.0.11670068]'
           Binding: 'this.Selection()'
         }
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_PanelPriorityFactorSelect.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_PanelPriorityFactorSelect.def
deleted file mode 100644
index 905d4a7..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_PanelPriorityFactorSelect.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-Component PanelPriorityFactorSelect
-{
-  #keys: '[414382.0.447270206]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component BusinessTypeSelectStringList
-    {
-      #keys: '[414382.0.447270221]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: '浜嬩笟閮�: '
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listActionBarPagePriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listActionBarPagePriorityFactor.def
index 2c9ba6f..e6fe1f9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listActionBarPagePriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listActionBarPagePriorityFactor.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component listActionBarPagePriorityFactor
 {
-  #keys: '[414382.0.453382066]'
+  #keys: '[414382.0.479644227]'
   BaseType: 'listActionBarPage'
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
index 484aad4..c6dd966 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
@@ -1,29 +1,30 @@
 Quintiq file version 2.0
 Component listContextMenuPriorityFactor
 {
-  #keys: '[414382.0.453382071]'
+  #keys: '[414382.0.479644232]'
   BaseType: 'listContextMenu'
   Children:
   [
-    Component MenuTestData
+    Component MenuInitData
     {
-      #keys: '[414382.0.452290464]'
+      #keys: '[414382.0.482890505]'
       BaseType: 'WebMenu'
       Properties:
       [
         Image: 'GEAR'
         Taborder: 3
-        Title: 'Test'
+        Title: 'Init Data'
       ]
     }
-    Component MenuClearTestData
+    Component MenuEdit
     {
-      #keys: '[414382.0.453953843]'
+      #keys: '[414382.0.485622263]'
       BaseType: 'WebMenu'
       Properties:
       [
+        Image: 'GEAR_EDIT'
         Taborder: 4
-        Title: 'ClearTestData'
+        Title: '缂栬緫'
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_BusinessTypeSelectStringList_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_BusinessTypeSelectStringList_OnCreated.def
deleted file mode 100644
index 64ef34c..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_BusinessTypeSelectStringList_OnCreated.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: BusinessTypeSelectStringList
-Response OnCreated () id:Response_FormPriorityFactor_BusinessTypeSelectStringList_OnCreated
-{
-  #keys: '[414382.0.454113391]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
-      this.Strings(strings);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_BusinessTypeSelectStringList_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_BusinessTypeSelectStringList_OnSelectionChanged.def
deleted file mode 100644
index d45eac2..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_BusinessTypeSelectStringList_OnSelectionChanged.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: BusinessTypeSelectStringList
-Response OnSelectionChanged () id:Response_FormPriorityFactor_BusinessTypeSelectStringList_OnSelectionChanged
-{
-  #keys: '[414382.0.454113392]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      list := PriorityFactor::GetDataByBusinessType( GlobalOTDTable, BusinessTypeSelectStringList.Text());
-      DataHolderPriorityFactorSelect.Data(&list);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
new file mode 100644
index 0000000..338425b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: DropDownStringListBusinessType
+Response OnCreated () id:Response_FormPriorityFactor_DropDownStringListBusinessType_OnCreated
+{
+  #keys: '[414382.0.461201807]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
+      this.Strings(strings);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
new file mode 100644
index 0000000..1018d65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: DropDownStringListBusinessType
+Response OnSelectionChanged () id:Response_FormPriorityFactor_DropDownStringListBusinessType_OnSelectionChanged
+{
+  #keys: '[414382.0.461060940]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
+      DataHolderPriorityFactorSelect.Data(&list);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuClearTestData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuClearTestData_OnClick.def
deleted file mode 100644
index 45d4098..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuClearTestData_OnClick.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPriorityFactor
-Response OnClick () id:Response_ListPriorityFactor_MenuClearTestData_OnClick
-{
-  #keys: '[414382.0.453592300]'
-  CanBindMultiple: false
-  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
-  Initiator: 'MenuClearTestData'
-  QuillAction
-  {
-    Body:
-    [*
-      PriorityFactorDetails::ClearTestData( GlobalOTDTable);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEdit_OnClick.def
new file mode 100644
index 0000000..c054fc1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick (
+  PriorityFactor selection
+) id:Response_ListPriorityFactor_MenuEdit_OnClick
+{
+  #keys: '[414382.0.485894605]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactor );
+      dlg.Edit( selection);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInitData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInitData_OnClick.def
new file mode 100644
index 0000000..f165c1b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInitData_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick () id:Response_ListPriorityFactor_MenuInitData_OnClick
+{
+  #keys: '[414382.0.482802120]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  Initiator: 'MenuInitData'
+  QuillAction
+  {
+    Body:
+    [*
+      PriorityFactorDetails::CreateTestData(  MacroPlan);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuTestData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuTestData_OnClick.def
deleted file mode 100644
index c7d9f86..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuTestData_OnClick.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPriorityFactor
-Response OnClick () id:Response_ListPriorityFactor_MenuTestData_OnClick
-{
-  #keys: '[414382.0.453471285]'
-  CanBindMultiple: false
-  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
-  Initiator: 'MenuTestData'
-  QuillAction
-  {
-    Body:
-    [*
-      PriorityFactorDetails::CreateTestData( GlobalOTDTable);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick.def
new file mode 100644
index 0000000..071de46
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick (
+  PriorityFactor selection
+) id:Response_ListPriorityFactor_OnClick
+{
+  #keys: '[414382.0.482282953]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
+      DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_PanelPriorityFactorSelect_BusinessTypeSelectStringList_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_PanelPriorityFactorSelect_BusinessTypeSelectStringList_OnCreated.def
deleted file mode 100644
index 85e7767..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_PanelPriorityFactorSelect_BusinessTypeSelectStringList_OnCreated.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPriorityFactorSelect/BusinessTypeSelectStringList
-Response OnCreated () id:Response_PanelPriorityFactorSelect_BusinessTypeSelectStringList_OnCreated
-{
-  #keys: '[414382.0.446101961]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
-      this.Strings(strings);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
index 26acdc7..f6e060e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
@@ -7,7 +7,6 @@
   BaseType: 'WebForm'
   Children:
   [
-    #child: ListPriorityFactor
     Component DataHolderPriorityFactorSelect
     {
       #keys: '[414382.0.453562359]'
@@ -15,18 +14,29 @@
       Databinding: 'structured[PriorityFactor]*'
       Properties:
       [
-        Taborder: 2
+        Taborder: 1
       ]
     }
-    Component BusinessTypeSelectStringList
+    Component DropDownStringListBusinessType
     {
-      #keys: '[414382.0.454113393]'
+      #keys: '[414382.0.461144262]'
       BaseType: 'WebDropDownStringList'
       Properties:
       [
-        Label: '浜嬩笟閮�: '
+        Label: '浜嬩笟閮�:'
         Taborder: 0
       ]
     }
+    #child: ListPriorityFactor
+    Component DataHolderPriorityFactorDetailsSelect
+    {
+      #keys: '[414382.0.482103344]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityFactorDetails]*'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def
new file mode 100644
index 0000000..a28ed5d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListPriorityFactorGrading
+{
+  #keys: '[414382.0.479530865]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityFactorGrading961
+    {
+      #keys: '[414382.0.479530866]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[PriorityFactorDetails]'
+        Source: 'DataHolderPriorityFactorGrading'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPagePriorityFactorGrading
+    Component DataSetLevelPriorityFactorGrading
+    {
+      #keys: '[414382.0.479530871]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityFactorGrading
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"GradingName","title":"缁嗗垎鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"GradingName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"GradeValueStr","title":"鍒嗙骇","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"GradeValueStr"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"GradeDesc","title":"鎻忚堪","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"GradeDesc"}}]'
+        ContextMenu: 'listContextMenuPriorityFactorGrading'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
+    {
+      #keys: '[414382.0.482374475]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selction
+        {
+          #keys: '[1231.0.33373473]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listActionBarPagePriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listActionBarPagePriorityFactorGrading.def
new file mode 100644
index 0000000..8253b39
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listActionBarPagePriorityFactorGrading.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityFactorGrading
+{
+  #keys: '[414382.0.479530868]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
new file mode 100644
index 0000000..39fe40c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityFactorGrading
+{
+  #keys: '[414382.0.479530873]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuEdit
+    {
+      #keys: '[414382.0.478491125]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_EDIT'
+        Taborder: 3
+        Title: '缂栬緫'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEdit_OnClick.def
new file mode 100644
index 0000000..b9822f6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactorGrading
+Response OnClick (
+  PriorityFactorDetails selction
+) id:Response_ListPriorityFactorGrading_MenuEdit_OnClick
+{
+  #keys: '[414382.0.479531766]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactorDetails);
+      dlg.Edit( selction);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
index 6f24830..bef2ddb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
@@ -5,4 +5,32 @@
 {
   #keys: '[414382.0.447270082]'
   BaseType: 'WebForm'
+  Children:
+  [
+    Component DataHolderPriorityFactorGrading
+    {
+      #keys: '[414382.0.478480902]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityFactorDetails]*'
+      Children:
+      [
+        Component DataExtractorPriorityFactorGrading
+        {
+          #keys: '[414382.0.478480916]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[PriorityFactorDetails]'
+            Source: 'FormPriorityFactor.DataHolderPriorityFactorDetailsSelect'
+            Taborder: 0
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: ListPriorityFactorGrading
+  ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
new file mode 100644
index 0000000..31e9e65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListPriorityPolicy
+{
+  #keys: '[414382.0.489382436]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityPolicy
+    {
+      #keys: '[414382.0.489382437]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[PriorityPolicy]'
+        Source: 'DataHolderPriorityPolicy'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPagePriorityPolicy
+    Component DataSetLevelPriorityPolicy
+    {
+      #keys: '[414382.0.489382442]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityPolicy
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Formula","title":"Formula","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Formula"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CalculateValue","title":"CalculateValue","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CalculateValue"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Desc","title":"Desc","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":""}}]'
+        ContextMenu: 'listContextMenuPriorityPolicy'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 2
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPriorityPolicy_WebMenu_OnClick
+    {
+      #keys: '[414382.0.489382571]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[1245.0.22804476]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listActionBarPagePriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listActionBarPagePriorityPolicy.def
new file mode 100644
index 0000000..63de41c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listActionBarPagePriorityPolicy.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityPolicy
+{
+  #keys: '[414382.0.489382439]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listContextMenuPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listContextMenuPriorityPolicy.def
new file mode 100644
index 0000000..594c493
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_listContextMenuPriorityPolicy.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityPolicy
+{
+  #keys: '[414382.0.489382444]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuNew
+    {
+      #keys: '[414382.0.487792532]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_ADD'
+        Taborder: 3
+        Title: '鏂板'
+      ]
+    }
+    Component MenuEdit
+    {
+      #keys: '[414382.0.487792555]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_EDIT'
+        Taborder: 4
+        Title: '缂栬緫'
+      ]
+    }
+    Component MenuDelete
+    {
+      #keys: '[414382.0.487792557]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_DELETE'
+        Taborder: 5
+        Title: '鍒犻櫎'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
new file mode 100644
index 0000000..64b4ab9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: DataHolderPriorityPolicy
+Response OnDataChanged () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnDataChanged
+{
+  #keys: '[414382.0.491200369]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
+      DataHolderPriorityPolicy.Data(&list);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def
new file mode 100644
index 0000000..5517113
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListPriorityPolicy
+Response OnClick (
+  PriorityPolicy selection
+) id:Response_ListPriorityPolicy_MenuDelete_OnClick
+{
+  #keys: '[414382.0.489382736]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityPolicy/Responsedef_ListPriorityPolicy_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
new file mode 100644
index 0000000..fc6f40c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPriorityPolicy
+Response OnClick () id:Response_ListPriorityPolicy_MenuEdit_OnClick
+{
+  #keys: '[414382.0.489382588]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityPolicy/Responsedef_ListPriorityPolicy_WebMenu_OnClick
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationMacroPlanner.OpenForm( 'FormPriorityPolicyOperation');
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuNew_OnClick.def
new file mode 100644
index 0000000..c71feb9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuNew_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListPriorityPolicy
+Response OnClick () id:Response_ListPriorityPolicy_MenuNew_OnClick
+{
+  #keys: '[414382.0.489382662]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityPolicy/Responsedef_ListPriorityPolicy_WebMenu_OnClick
+  Initiator: 'MenuNew'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogNewPriorityPolicy );
+      businessType := PriorityPolicyBusinessType.Text();
+      dlg.New( MacroPlan, businessType);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def
new file mode 100644
index 0000000..4fd7821
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: PriorityPolicyBusinessType
+Response OnCreated () id:Response_FormPriorityPolicy_PriorityPolicyBusinessType_OnCreated
+{
+  #keys: '[414382.0.486330568]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
+      this.Strings(strings);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
new file mode 100644
index 0000000..a06057d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PriorityPolicyBusinessType
+Response OnSelectionChanged () id:Response_FormPriorityPolicy_PriorityPolicyBusinessType_OnSelectionChanged
+{
+  #keys: '[414382.0.486330569]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
+      DataHolderPriorityPolicy.Data(&list);
+      DataHolderPriorityPolicySelectBusinessType.Data( PriorityPolicyBusinessType.Text());
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
new file mode 100644
index 0000000..75ab278
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPriorityPolicy
+{
+  #keys: '[414382.0.487620644]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component PriorityPolicyBusinessType
+    {
+      #keys: '[414382.0.486330570]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '浜嬩笟閮�:'
+        Taborder: 0
+      ]
+    }
+    Component DataHolderPriorityPolicy
+    {
+      #keys: '[414382.0.487792124]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityPolicy]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: ListPriorityPolicy
+    Component DataHolderPriorityPolicySelectBusinessType
+    {
+      #keys: '[414382.0.490151931]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+  ]
+  Properties:
+  [
+    Title: '浼樺厛绾х瓥鐣ュ垪琛�'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyCoefficient\043428.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyCoefficient\043428.def"
new file mode 100644
index 0000000..dbf9712
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyCoefficient\043428.def"
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+Component PanelPriorityPolicyCoefficient
+{
+  #keys: '[414382.0.491374606]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelPriorityPolicyCoefficient
+    {
+      #keys: '[414382.0.491374627]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鍥犲瓙鐨勭郴鏁�'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 9
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyOperation.def
new file mode 100644
index 0000000..34a03b8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyOperation.def
@@ -0,0 +1,102 @@
+Quintiq file version 2.0
+Component PanelPriorityPolicyOperation
+{
+  #keys: '[414382.0.490130786]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonAddPriorityPolicy
+    {
+      #keys: '[414382.0.490130807]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '娣诲姞鍥犲瓙'
+        Taborder: 1
+      ]
+    }
+    Component Buttonplus
+    {
+      #keys: '[414382.0.490130825]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '+'
+        Taborder: 2
+      ]
+    }
+    Component ButtonSubtract
+    {
+      #keys: '[414382.0.490130836]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    Component StringListPriorityPolicyOperation
+    {
+      #keys: '[414382.0.492194048]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '浼樺厛绾у洜瀛�:'
+        Taborder: 0
+      ]
+    }
+    Component ButtonMultiply
+    {
+      #keys: '[414382.0.490151249]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
+    Component ButtonDivide
+    {
+      #keys: '[414382.0.490151283]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
+    Component ButtonLeftParenthesis
+    {
+      #keys: '[414382.0.490151322]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 6
+      ]
+    }
+    Component ButtonRightParenthesis
+    {
+      #keys: '[414382.0.490151325]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 7
+      ]
+    }
+    Component ButtonRollBack
+    {
+      #keys: '[414382.0.490151327]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 8
+      ]
+    }
+    #child: PanelPriorityPolicyCoefficient
+  ]
+  Properties:
+  [
+    FixedSize: true
+    MinimumColumns: 10
+    MinimumRows: 1
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated.def
new file mode 100644
index 0000000..6165dce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: DataHolderPriorityPolicyOperationPriorityFactor
+Response OnCreated () id:Response_FormPriorityPolicyOperation_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated
+{
+  #keys: '[414382.0.490152499]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      businessType := DataHolderPriorityPolicySelectBusinessType.Data();
+      list := PriorityFactor::GetDataByBusinessType( MacroPlan,businessType);
+      this.Data(&list);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCr.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCr.def
new file mode 100644
index 0000000..b6f1c25
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCr.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperation/StringListPriorityPolicyOperation
+Response OnCreated () id:Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCreated
+{
+  #keys: '[414382.0.490112531]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      list := DataHolderPriorityPolicyOperationPriorityFactor.Data();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/_ROOT_Component_FormPriorityPolicyOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/_ROOT_Component_FormPriorityPolicyOperation.def
new file mode 100644
index 0000000..25d030b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/_ROOT_Component_FormPriorityPolicyOperation.def
@@ -0,0 +1,90 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPriorityPolicyOperation
+{
+  #keys: '[414382.0.489382838]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component PriorityPolicyName
+    {
+      #keys: '[414382.0.489442519]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '浼樺厛绾х瓥鐣ュ悕绉�:'
+        Taborder: 0
+      ]
+    }
+    Component DataHolderPriorityPolicyOperation
+    {
+      #keys: '[414382.0.489442547]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'PriorityPolicy'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    Component LabelFormula
+    {
+      #keys: '[414382.0.489443040]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鍏紡:'
+        Taborder: 2
+      ]
+    }
+    Component LabelCalculateValue
+    {
+      #keys: '[414382.0.489443084]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '璁$畻鍊�:'
+        Taborder: 3
+      ]
+    }
+    #child: PanelPriorityPolicyOperation
+    Component DataHolderPriorityPolicySelectBusinessType
+    {
+      #keys: '[414382.0.490152351]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String'
+      Children:
+      [
+        Component DataExtractorPriorityPolicySelectBusinessType
+        {
+          #keys: '[414382.0.490152374]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'String'
+            Source: 'DataHolderPriorityPolicySelectBusinessType'
+            Taborder: 0
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
+    Component DataHolderPriorityPolicyOperationPriorityFactor
+    {
+      #keys: '[414382.0.490152466]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityFactor]*'
+      Properties:
+      [
+        Taborder: 6
+      ]
+    }
+  ]
+  Properties:
+  [
+    Title: '浼樺厛绾х瓥鐣ラ厤缃�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def
index 71d6ba4..015e693 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def
@@ -1,4 +1,118 @@
 Quintiq file version 2.0
 Component ListScenario #extension
 {
+  Children:
+  [
+    Component DataSetLevelScenario #extension
+    {
+      Children:
+      [
+        Component listContextMenuScenarioFolder #extension
+        {
+          Children:
+          [
+            Component MenuRelaeaseNewVersion
+            {
+              #keys: '[412960.0.168283194]'
+              BaseType: 'WebMenu'
+              Properties:
+              [
+                DelegationID: 'ActionBarScenario_Release'
+                Description: '鍙戝竷鏂扮増鏈�'
+                Image: 'EDITOR_ALGORITHM'
+                Taborder: 10
+                Title: 'Release New Version...'
+              ]
+            }
+            Component MenuCopyScenario #extension
+            {
+            }
+            Component MenuSaveNewVersion
+            {
+              #keys: '[412960.0.172960163]'
+              BaseType: 'WebMenu'
+              Properties:
+              [
+                DelegationID: 'ActionBarScenario_Save'
+                Description: '鍙戝竷鏂扮増鏈�'
+                Image: 'DATA_DISK'
+                Taborder: 11
+                Title: 'Save New Version...'
+              ]
+            }
+            Component MenuSeparator2 #extension
+            {
+              Properties:
+              [
+                Taborder: 12
+              ]
+            }
+            Component MenuSeparator3 #extension
+            {
+              Properties:
+              [
+                Taborder: 14
+              ]
+            }
+            Component MenuSelectScenario #extension
+            {
+              Properties:
+              [
+                Taborder: 13
+              ]
+            }
+            Component MenuEditAuthorization #extension
+            {
+              Properties:
+              [
+                Taborder: 15
+              ]
+            }
+            Component MenuSeparator4 #extension
+            {
+              Properties:
+              [
+                Taborder: 16
+              ]
+            }
+            Component MenuLoadScenario #extension
+            {
+              Properties:
+              [
+                Taborder: 17
+              ]
+            }
+            Component MenuUnloadScenario #extension
+            {
+              Properties:
+              [
+                Taborder: 18
+              ]
+            }
+            Component MenuSeparator5 #extension
+            {
+              Properties:
+              [
+                Taborder: 19
+              ]
+            }
+            Component MenuAdministration #extension
+            {
+              Properties:
+              [
+                Taborder: 20
+              ]
+            }
+            Component MenuRestoreItem #extension
+            {
+              Properties:
+              [
+                Taborder: 21
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCopyScenario_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCopyScenario_OnClick.def
new file mode 100644
index 0000000..93390c2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCopyScenario_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: ListScenario
+Response OnClick (
+  ScenarioMP selection
+) id:Response_ListScenario_MenuCopyScenario_OnClick #extension
+{
+  Precondition:
+  [*
+    feedback := ApplicationMacroPlanner.HasValidDataset( selection );
+    return feedback = '' and selection.CanCopy( feedback );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def
new file mode 100644
index 0000000..745d231
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def
@@ -0,0 +1,52 @@
+Quintiq file version 2.0
+#parent: ListScenario
+Response OnClick (
+  ScenarioMP selection
+) id:Response_ListScenario_MenuRelaeaseNewVersion_OnClick
+{
+  #keys: '[412960.0.170112594]'
+  CanBindMultiple: false
+  DefinitionID => /ListScenario/Responsedef_ListScenario_WebMenu_OnClick
+  Initiator: 'MenuRelaeaseNewVersion'
+  Precondition:
+  [*
+    feedback := ApplicationMacroPlanner.HasValidDataset( selection );
+    return feedback = '' and selection.CanCopy( feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // Copy scenario
+      owner := GlobalOTDTable;
+      macroplan := MacroPlan;
+      testbusinesstype := "闆嗗洟";
+      
+      VersionControl::ReleaseNewVersion( owner, testbusinesstype );
+      GlobalOTDTable::GetOutputVersionData( owner, macroplan, testbusinesstype );
+      selection.SetReleased();
+      
+      versionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 3 );
+      // Get the active scenario
+      //data := selection;
+      newscenario := null( Scenario );
+      strategy := null( Strategy );
+      
+      data := ScenarioManager.ScenarioNode( relshadow,
+                                                ScenarioMP,
+                                                Parent := selection,
+                                                Name := versionname,
+                                                SelectedStrategy := selection.SelectedStrategy(),
+                                                State := selection.State() );
+      
+      scenario := data.Parent().astype( ScenarioMP );
+      strategy := data.SelectedStrategy();
+           
+      newscenario:= scenario.Copy( data.Parent(), versionname, "",
+                                   data.Comment(), data.State() );
+      
+      newscenario.SelectedStrategy( relset, strategy );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def
new file mode 100644
index 0000000..1f8b93b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def
@@ -0,0 +1,49 @@
+Quintiq file version 2.0
+#parent: ListScenario
+Response OnClick (
+  ScenarioMP selection
+) id:Response_ListScenario_MenuSaveNewVersion_OnClick
+{
+  #keys: '[412960.0.171680443]'
+  CanBindMultiple: false
+  DefinitionID => /ListScenario/Responsedef_ListScenario_WebMenu_OnClick
+  Initiator: 'MenuSaveNewVersion'
+  Precondition:
+  [*
+    feedback := ApplicationMacroPlanner.HasValidDataset( selection );
+    return feedback = '' and selection.CanCopy( feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // Copy scenario
+      owner := GlobalOTDTable;
+      macroplan := MacroPlan;
+      testbusinesstype := "闆嗗洟";
+      
+      VersionControl::CopyVersion( owner, testbusinesstype );
+      
+      versionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 3 );
+      // Copy scenario
+      newscenario := null( Scenario );
+      strategy := null( Strategy );
+      
+      data := ScenarioManager.ScenarioNode( relshadow,
+                                                ScenarioMP,
+                                                Parent := selection,
+                                                Name := versionname,
+                                                SelectedStrategy := selection.SelectedStrategy(),
+                                                State := selection.State() );
+      
+      scenario := data.Parent().astype( ScenarioMP );
+      strategy := data.SelectedStrategy();
+           
+      newscenario:= scenario.Copy( data.Parent(), versionname, "",
+                                   data.Comment(), data.State() );
+      
+      newscenario.SelectedStrategy( relset, strategy );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def
new file mode 100644
index 0000000..79d85e4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListVersionOfSOP
+{
+  #keys: '[412960.0.134950322]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorVersionOfSOP642
+    {
+      #keys: '[412960.0.134950323]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[VersionStatus]'
+        Source: 'DataHolderVersionOfSOP'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPageVersionOfSOP
+    Component DataSetLevelVersionOfSOP
+    {
+      #keys: '[412960.0.134950328]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuVersionOfSOP
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SortNumber","title":"SortNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SortNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessName","title":"BusinessName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastVersionName","title":"LastVersionName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastVersionName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastReleaseTime","title":"LastReleaseTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastReleaseTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastUser","title":"LastUser","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastUser"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Notes","title":"Notes","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Notes"}}]'
+        ContextMenu: 'listContextMenuVersionOfSOP'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def
new file mode 100644
index 0000000..be02538
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListVersionOfSOPDetails
+{
+  #keys: '[412960.0.142180298]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorVersionOfSOPDetails
+    {
+      #keys: '[412960.0.142180299]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[VersionStatusDetail]'
+        Source: 'DataHolderVersionOfSOPDetails'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPageVersionOfSOPDetails
+    Component DataSetLevelVersionOfSOPDetails
+    {
+      #keys: '[412960.0.142180304]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuVersionOfSOPDetails
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SortNumber","title":"SortNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SortNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SingleVersionName","title":"SingleVersionName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SingleVersionName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CreateTime","title":"CreateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CreateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReleaseTime","title":"ReleaseTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReleaseTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"User","title":"User","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"User"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Notes","title":"Notes","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Notes"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VersionID","title":"VersionID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VersionID"}}]'
+        ContextMenu: 'listContextMenuVersionOfSOPDetails'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def
new file mode 100644
index 0000000..d36cfe7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelVersionOfSOP
+{
+  #keys: '[412960.0.134980204]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListVersionOfSOP
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def
new file mode 100644
index 0000000..ea7f4ea
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelVersionOfSOPDetails
+{
+  #keys: '[412960.0.140720490]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListVersionOfSOPDetails
+  ]
+  Properties:
+  [
+    Description: '浜嬩笟閮ㄥ彂甯冪姸鎬佽鎯卲anel'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
new file mode 100644
index 0000000..b99ab6c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+Component PanelVersionOfSOPHeader
+{
+  #keys: '[412960.0.137940569]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonVersionOfSOPHeaderFresh
+    {
+      #keys: '[412960.0.138000879]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '鐢ㄤ簬鍒锋柊鍚勪簨涓氶儴褰撳墠鐗堟湰鍙戝竷鐘舵�佺殑鎸夐挳'
+        Label: '鍒锋柊'
+        Taborder: 1
+      ]
+    }
+    Component ButtonVersionOfSOPHeaderCopy
+    {
+      #keys: '[412960.0.138000890]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '鐢ㄤ簬澶嶅埗閫変腑鐨勭増鏈叏閲忕増鏈彿鐨勬寜閽�'
+        Label: '鍏ㄩ噺鐗堟湰鍙峰鍒�'
+        Taborder: 2
+      ]
+    }
+    Component ButtonVersionOfSOPHeaderRelease
+    {
+      #keys: '[412960.0.142110396]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '鍙戝竷涓�涓柊鐗堟湰'
+        Label: '娴嬭瘯鐢ㄧ増鏈彂甯�'
+        Taborder: 3
+        Visible: false
+      ]
+    }
+    Component LabelVersionOfSOPHeader
+    {
+      #keys: '[412960.0.138000861]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Description: '鐗堟湰鍙峰睍绀哄'
+        FixedSize: false
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '鐢ㄤ簬鏀剧疆琛ㄥご淇℃伅鍙婃寜閽殑panel'
+    FixedSize: true
+    Orientation: 'horizontal'
+    Style: 'header'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def
new file mode 100644
index 0000000..b858147
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageVersionOfSOP
+{
+  #keys: '[412960.0.134950325]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def
new file mode 100644
index 0000000..1ace6df
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageVersionOfSOPDetails
+{
+  #keys: '[412960.0.142180301]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def
new file mode 100644
index 0000000..bdded9e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuVersionOfSOP
+{
+  #keys: '[412960.0.134950330]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def
new file mode 100644
index 0000000..74b47c7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuVersionOfSOPDetails
+{
+  #keys: '[412960.0.142180306]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
new file mode 100644
index 0000000..ff0fa8b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelVersionOfSOPHeader/ButtonVersionOfSOPHeaderCopy
+Response OnClick () id:Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick
+{
+  #keys: '[412960.0.149330244]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      owner := GlobalOTDTable;
+      testbusinesstype := "闆嗗洟";
+      rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 2 );
+      dlg := construct( DialogVersionIDCopy );
+      dlg.lblContent().Text( rootversionid );
+      dlg.JustShow();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
new file mode 100644
index 0000000..d0a18a1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelVersionOfSOPHeader/ButtonVersionOfSOPHeaderFresh
+Response OnClick () id:Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick
+{
+  #keys: '[412960.0.133611384]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      owner := GlobalOTDTable;
+      testbusinesstype := "闆嗗洟";
+      //GlobalOTDTable::GetVersionData( owner, testbusinesstype );
+      rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 0 );
+      DataExtractorVersionOfSOPDetails.FixedFilter( "object.VersionID().FindString( " + rootversionid.AsQUILL() + ", 0 ) = 0" );
+      rootversionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 1 );
+      LabelVersionOfSOPHeader.Text( rootversionname );
+      VersionStatus::GetBusinessTypeStatus( owner, rootversionid );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def
new file mode 100644
index 0000000..a3136f5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelVersionOfSOPHeader/ButtonVersionOfSOPHeaderRelease
+Response OnClick () id:Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick
+{
+  #keys: '[412960.0.142110414]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      owner := GlobalOTDTable;
+      macroplan := MacroPlan;
+      testbusinesstype := "闆嗗洟";
+      
+      VersionControl::ReleaseNewVersion( owner, testbusinesstype );
+      //GlobalOTDTable::GetOutputVersionData( owner, macroplan, testbusinesstype );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
new file mode 100644
index 0000000..9a4348d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
@@ -0,0 +1,82 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormVersionOfSOP
+{
+  #keys: '[412960.0.135200328]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelVersionOfSOP
+    Component DataHolderVersionOfSOP
+    {
+      #keys: '[412960.0.134980222]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[VersionStatus]*'
+      Children:
+      [
+        Component DataExtractorVersionOfSOP
+        {
+          #keys: '[412960.0.134980234]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'GlobalOTDTable'
+            Source: 'GlobalOTDTable'
+            Taborder: 0
+            Transformation: 'VersionStatus'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    #child: PanelVersionOfSOPHeader
+    #child: PanelVersionOfSOPDetails
+    Component DataHolderVersionOfSOPDetails
+    {
+      #keys: '[412960.0.140750496]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[VersionStatusDetail]*'
+      Children:
+      [
+        Component DataExtractorVersionOfSOPDetails453
+        {
+          #keys: '[412960.0.142212532]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'VersionStatus'
+            ExtractionMode: 'Selected'
+            Source: 'ListVersionOfSOP'
+            Taborder: 0
+            Transformation: 'VersionStatusDetail'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Description: '浜嬩笟閮ㄥ搴旇鎯呮暟鎹�'
+        Taborder: 4
+      ]
+    }
+    Component DataHolderVersionOfSOPCopy
+    {
+      #keys: '[412960.0.166861218]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[ScenarioMP]*'
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: 'SOP鐗堟湰鏁版嵁灞曠ず鐣岄潰'
+    Image: 'WINDOW_TIME'
+    Title: 'SOP鍚勪簨涓氶儴鏁版嵁鍚屾鐘舵��'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw b/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
new file mode 100644
index 0000000..42bce1a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 277
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 106
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    index: 2
+    image: 'DOCUMENT_LOCK'
+    description: ''
+  }
+  formatversion: 2
+  id: 'OrderLock'
+  name: 'OrderLock'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/PriorityPolicy.vw b/_Main/UI/MacroPlannerWebApp/Views/PriorityPolicy.vw
new file mode 100644
index 0000000..456343d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/PriorityPolicy.vw
@@ -0,0 +1,2258 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 197
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 91
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_1
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 2
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_1
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 3
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_2
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 4
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_2
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 5
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_3
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 6
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_3
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 7
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_4
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 8
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_4
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 9
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_5
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 10
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_5
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 11
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_6
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 12
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_6
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 13
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_7
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 14
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_7
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 15
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormSanityCheck
+      {
+        title: 'Sanity Check'
+        shown: false
+        componentID: 'FormSanityCheck'
+        layout
+        {
+          mode: 'dockright'
+          index: 16
+        }
+        components
+        {
+          FormSanityCheck_PanelSanityCheckToolbar
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckContent
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckGroup
+          {
+            sizeRatio: 4
+          }
+          FormSanityCheck_ListSanityCheckGroup
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckGroup
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Group
+            {
+              columnId: 'Group'
+              dataPath: 'Group'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 270
+            }
+            column__Expr3
+            {
+              columnId: '_Expr3'
+              dataPath: '_Expr3'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 95
+            }
+          }
+          FormSanityCheck_PanelSanityCheckMessage
+          {
+            sizeRatio: 5
+          }
+          FormSanityCheck_ListSanityCheckMessage
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckMessage
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Messages
+            {
+              columnId: 'Messages'
+              dataPath: 'Messages'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 32
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 585
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_8
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 17
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_8
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 18
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_9
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 19
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_9
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 20
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_10
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 21
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_10
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 22
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_11
+      {
+        title: 'Optimizer Puzzles'
+        shown: true
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 23
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_11
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 24
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_12
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 25
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_12
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 26
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_13
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 27
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_13
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 28
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_14
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 29
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_14
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 30
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_15
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 31
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_15
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 32
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormSanityCheck_1
+      {
+        title: 'Sanity Check'
+        shown: false
+        componentID: 'FormSanityCheck'
+        layout
+        {
+          mode: 'dockright'
+          index: 33
+        }
+        components
+        {
+          FormSanityCheck_PanelSanityCheckToolbar
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckContent
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckGroup
+          {
+            sizeRatio: 4
+          }
+          FormSanityCheck_ListSanityCheckGroup
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckGroup
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Group
+            {
+              columnId: 'Group'
+              dataPath: 'Group'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 270
+            }
+            column__Expr3
+            {
+              columnId: '_Expr3'
+              dataPath: '_Expr3'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 95
+            }
+          }
+          FormSanityCheck_PanelSanityCheckMessage
+          {
+            sizeRatio: 5
+          }
+          FormSanityCheck_ListSanityCheckMessage
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckMessage
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Messages
+            {
+              columnId: 'Messages'
+              dataPath: 'Messages'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 32
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 585
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 14
+    image: ''
+    description: ''
+  }
+  formatversion: 2
+  id: 'PriorityPolicy'
+  name: 'PriorityPolicy'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw b/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw
new file mode 100644
index 0000000..6f6e533
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 197
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 91
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: 'Category'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: 'Importance'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: 'Title'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: 'Description'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    index: 1
+    image: 'WINDOW_TIME'
+    description: ''
+  }
+  formatversion: 2
+  id: 'SOP_Versions'
+  name: 'SOP Versions'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\241\253\344\272\247\346\226\271\346\241\210\345\210\227\350\241\250.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\241\253\344\272\247\346\226\271\346\241\210\345\210\227\350\241\250.vw"
index da19691..359d913 100644
--- "a/_Main/UI/MacroPlannerWebApp/Views/\345\241\253\344\272\247\346\226\271\346\241\210\345\210\227\350\241\250.vw"
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\241\253\344\272\247\346\226\271\346\241\210\345\210\227\350\241\250.vw"
@@ -180,10 +180,10 @@
     userconfigurableinformation
     {
     }
+    index: 0
     image: ''
     page: ''
     group: ''
-    index: 0
     description: ''
   }
   formatversion: 2
diff --git a/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties b/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
index 0b578d4..58f022e 100644
--- a/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
+++ b/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
@@ -204,11 +204,11 @@
 domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.parameters=
 domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.password=
 domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle=template:domainmodel.ediremotedatasourcedefinition
-domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.connection=dbodbc1
 domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxcolumnnamelength=0
 domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxtablenamelength=0
-domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.parameters=
-domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.parameters=/datasource=orclpdb /owner=TIANMA /chardatatypeforstring /characterencoding=UTF-8 /appdatatypeforstring=wchar
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.password=1 E9FE769DABE91891284EBBA6CEA8F41B 479d6f99-cffb-41e6-94f1-d35bdf20703c
 domainmodel.ediremotedatasourcedefinition.remotestorage.oracle=template:domainmodel.ediremotedatasourcedefinition
 domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.connection=dbodbc1
 domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.maxcolumnnamelength=0
diff --git "a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/\345\241\253\344\272\247\346\226\271\346\241\210\345\210\227\350\241\250.vw" "b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/\345\241\253\344\272\247\346\226\271\346\241\210\345\210\227\350\241\250.vw"
deleted file mode 100644
index b90401b..0000000
--- "a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/\345\241\253\344\272\247\346\226\271\346\241\210\345\210\227\350\241\250.vw"
+++ /dev/null
@@ -1,11 +0,0 @@
-Quintiq file version 2.0
-{
-  viewcontents
-  {
-  }
-  formatversion: 2
-  id: '濉骇鏂规鍒楄〃'
-  name: 'FillingCapacitySchemeList'
-  isglobal: false
-  isroot: false
-}

--
Gitblit v1.9.3