lazhen
2024-10-15 8c546e869f979f6f9e83d141cb8b767da6472d66
Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg
已重命名4个文件
已添加33个文件
已修改51个文件
已删除46个文件
2211 ■■■■■ 文件已修改
_Main/BL/Relations/Relation_ArchiveBudget_Archive_Archive_ArchiveBudget.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchiveCurve_Archive_Archive_ArchiveCurve.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchiveFile_Archive_Archive_ArchiveFile.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchiveIDS_Archive_Archive_ArchiveIDS.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchivePPA_Archive_Archive_ArchivePPA.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchivePP_Archive_Archive_ArchivePP.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchivePR_Archive_Archive_ArchivePR.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_Archive.qbl 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/Attribute_DateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/Attribute_FilePath.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/Attribute_UserName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/DefaultValue_FilePath.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/DefaultValue_Name.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/DefaultValue_UserName.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveBudget/_ROOT_Type_ArchiveBudget.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveCurve/Attribute_DateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveCurve/Attribute_FilePath.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveCurve/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveCurve/Attribute_UserName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveCurve/_ROOT_Type_ArchiveCurve.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/Attribute_DateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/Attribute_FilePath.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/Attribute_UserName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/DefaultValue_FilePath.qbl 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/DefaultValue_Name.qbl 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/DefaultValue_UserName.qbl 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveFile/_ROOT_Type_ArchiveFile.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/Attribute_DateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/Attribute_FilePath.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/Attribute_UserName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/DefaultValue_FilePath.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/DefaultValue_Name.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/DefaultValue_UserName.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchiveIDS/_ROOT_Type_ArchiveIDS.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/Attribute_DateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/Attribute_FilePath.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/Attribute_UserName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/DefaultValue_FilePath.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/DefaultValue_Name.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/DefaultValue_UserName.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePP/_ROOT_Type_ArchivePP.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePPA/Attribute_DateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePPA/Attribute_FilePath.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePPA/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePPA/Attribute_UserName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePPA/_ROOT_Type_ArchivePPA.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/Attribute_DateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/Attribute_FilePath.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/Attribute_UserName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/DefaultValue_FilePath.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/DefaultValue_Name.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/DefaultValue_UserName.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/_ROOT_Type_ArchivePR.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Forecast/StaticMethod_SplitUsingCurve.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_ComparedNew.qbl 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern0.qbl 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewOfflinePlanCell/Method_GetNewOfflinePlanMatrixTooltip.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_DeductionOfReplacementLoss.qbl 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_SynchronizeToNewSupply.qbl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewOfflinePlanRow/Attribute_OperationID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewOfflinePlanTable/Method_Comparison.qbl 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/Function_CalcTableName.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_CreateNew.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductionLineBatchData/Method_OnOK.qbl 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mOfflinePlanInterface_OnClick.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPAArchive.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelFilter.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504#801.def 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_OnCreated.def 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelFilter_ButtonClearFilter_OnClick#466.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelFilter_ButtonFilter_OnClick.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated#57.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation#568.def 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionBudget.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionCurve.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionIDS.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPP.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPPA.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPR.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomation.def 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomationBase.def 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomationCompare.def 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick#781.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_dhXMLDataListener_OnDataChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_bSelectionChecks703_OnClick.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_bSelectionChecks422_OnClick.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_bSelectionChecks289_OnClick.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_bSelectionChecks253_OnClick.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_bSelectionChecks687_OnClick.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_bSelectionChecks700_OnClick.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pVersionInfomationBase_ButtonDelete_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pVersionInfomationCompare_ButtonDelete2_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick#715.def 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor515.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bConfirm_OnClick.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bDeductChangeoverLoss_OnClick.def 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_OnCreated.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelDaily#478.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelDaily819.def 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight445.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelWeekly#791.def 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelWeekly996.def 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelDaily_478_bApply568_OnClick#952.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelWeekly_791_bApply_OnClick.def 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionPlan/Component_MatrixEditorPISPIP.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionPlan/Component_PanelMatrix.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormProductionPlan/_ROOT_Component_FormProductionPlan.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Forecasts.vw 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/NewOfflinePlan.vw 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Time_Capacities.vw 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/TransferPlan.vw 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchiveBudget_Archive_Archive_ArchiveBudget.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_ArchiveCurve_Archive_Archive_ArchiveCurve.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_ArchiveFile_Archive_Archive_ArchiveFile.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ArchiveFile_Archive_Archive_ArchiveFile
{
  #keys: '1[414996.1.137244656]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Archive
  {
    #keys: '3[414996.1.137244658][414996.1.137244657][414996.1.137244659]'
    Cardinality: '0to1'
    ObjectDefinition: ArchiveFile
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ArchiveFile
  {
    #keys: '3[414996.1.137244661][414996.1.137244660][414996.1.137244662]'
    Cardinality: '1toN'
    ObjectDefinition: Archive
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ArchiveIDS_Archive_Archive_ArchiveIDS.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_ArchivePPA_Archive_Archive_ArchivePPA.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_ArchivePP_Archive_Archive_ArchivePP.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_ArchivePR_Archive_Archive_ArchivePR.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_Archive/StaticMethod_Archive.qbl
@@ -23,42 +23,42 @@
        filePath        := archiveFileJSON.Get( "fileFullPath" ).GetString();
        
        if ( archiveType = "PR" ) {
          apr := select( archive, ArchivePR, tempAPR, tempAPR.Name() = fileName );
          apr := select( archive, ArchiveFile.astype( ArchivePR ), tempAPR, tempAPR.Name() = fileName );
          if ( not isnull( apr ) ) {
            apr.FilePath( filePath );
          } else {
            archive.ArchivePR( relnew, Name := fileName, FilePath := filePath );
            archive.ArchiveFile( relnew,ArchivePR, Name := fileName, FilePath := filePath );
          }
        } else if ( archiveType = "PP" ) {
          app := select( archive, ArchivePP, tempAPP, tempAPP.Name() = fileName );
          app := select( archive, ArchiveFile.astype( ArchivePP ), tempAPP, tempAPP.Name() = fileName );
          if ( not isnull( app ) ) {
            app.FilePath( filePath );
          } else {
            archive.ArchivePP( relnew, Name := fileName, FilePath := filePath );
            archive.ArchiveFile( relnew,ArchivePP, Name := fileName, FilePath := filePath );
          }
        } else if ( archiveType = "Budget" ) {
          ab := select( archive, ArchiveBudget, tempAB, tempAB.Name() = fileName );
          ab := select( archive, ArchiveFile.astype( ArchiveBudget ), tempAB, tempAB.Name() = fileName );
          if ( not isnull( ab ) ) {
            ab.FilePath( filePath );
          } else {
            archive.ArchiveBudget( relnew, Name := fileName, FilePath := filePath );
            archive.ArchiveFile( relnew,ArchiveBudget, Name := fileName, FilePath := filePath );
          }
        } else if ( archiveType = "PPA" ) {
          // å­˜æ¡£PPA
          appa := select( archive, ArchivePPA, tempAPPA, tempAPPA.Name() = fileName );
          appa := select( archive, ArchiveFile.astype( ArchivePPA ), tempAPPA, tempAPPA.Name() = fileName );
          if ( not isnull( appa ) ) {
            appa.FilePath( filePath );
            appa.SourceFileBinaryValue( ppaBinaryValue );
          } else {
            archive.ArchivePPA( relnew, Name := fileName, FilePath := filePath, SourceFileBinaryValue := ppaBinaryValue );
            archive.ArchiveFile( relnew,ArchivePPA, Name := fileName, FilePath := filePath, SourceFileBinaryValue := ppaBinaryValue );
          }
          
          // å­˜æ¡£Curve
          ac := select( archive, ArchiveCurve, tempAC, true );
          ac := select( archive, ArchiveFile.astype( ArchiveCurve ), tempAC, true );
          if ( not isnull( ac ) ) {
            ac.Delete();
          }
          archive.ArchiveCurve( relnew, Name := "始终只存一版.xlsx", FilePath := curveFileName, SourceFileBinaryValue := curveBinaryValue );
          archive.ArchiveFile( relnew,ArchiveCurve, Name := "始终只存一版.xlsx", FilePath := curveFileName, SourceFileBinaryValue := curveBinaryValue );
        }
      }
    }
_Main/BL/Type_ArchiveBudget/Attribute_DateTime.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveBudget/Attribute_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveBudget/Attribute_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveBudget/Attribute_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveBudget/DefaultValue_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveBudget/DefaultValue_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveBudget/DefaultValue_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveBudget/_ROOT_Type_ArchiveBudget.qbl
@@ -1,9 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchiveBudget
TypeSpecialization ArchiveBudget
{
  #keys: '5[413988.0.1193510071][413988.0.1193510069][0.0.0][413988.0.1193510070][413988.0.1193510072]'
  BaseType: Object
  #keys: '2[414996.1.137364727][413988.0.1193510069]'
  Parent: ArchiveFile
  StructuredName: 'ArchiveBudgets'
}
_Main/BL/Type_ArchiveCurve/Attribute_DateTime.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveCurve/Attribute_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveCurve/Attribute_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveCurve/Attribute_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveCurve/_ROOT_Type_ArchiveCurve.qbl
@@ -1,9 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchiveCurve
TypeSpecialization ArchiveCurve
{
  #keys: '5[413988.0.1193510144][413988.0.1193510142][0.0.0][413988.0.1193510143][413988.0.1193510145]'
  BaseType: Object
  #keys: '2[414996.1.137364732][413988.0.1193510142]'
  Parent: ArchiveFile
  StructuredName: 'ArchiveCurves'
}
_Main/BL/Type_ArchiveFile/Attribute_DateTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute DateTime
{
  #keys: '3[414996.1.137244673][414996.1.137244672][414996.1.137244674]'
  ValueType: DateTime
}
_Main/BL/Type_ArchiveFile/Attribute_FilePath.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute FilePath
{
  #keys: '3[414996.1.137244676][414996.1.137244675][414996.1.137244677]'
  ValueType: String
}
_Main/BL/Type_ArchiveFile/Attribute_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Name
{
  #keys: '3[414996.1.137244679][414996.1.137244678][414996.1.137244680]'
  ValueType: String
}
_Main/BL/Type_ArchiveFile/Attribute_UserName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute UserName
{
  #keys: '3[414996.1.137244670][414996.1.137244669][414996.1.137244671]'
  ValueType: String
}
_Main/BL/Type_ArchiveFile/DefaultValue_FilePath.qbl
_Main/BL/Type_ArchiveFile/DefaultValue_Name.qbl
_Main/BL/Type_ArchiveFile/DefaultValue_UserName.qbl
_Main/BL/Type_ArchiveFile/_ROOT_Type_ArchiveFile.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchiveFile
{
  #keys: '5[414996.1.137244653][414996.1.137244651][0.0.0][414996.1.137244652][414996.1.137244654]'
  BaseType: Object
  OnCreate: 'this.DateTime( DateTime::Now() );'
  OnDelete:
  [*
    OS::RemoveFile( this.FilePath() );
  *]
  StructuredName: 'ArchiveFiles'
}
_Main/BL/Type_ArchiveIDS/Attribute_DateTime.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveIDS/Attribute_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveIDS/Attribute_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveIDS/Attribute_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveIDS/DefaultValue_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveIDS/DefaultValue_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveIDS/DefaultValue_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchiveIDS/_ROOT_Type_ArchiveIDS.qbl
@@ -1,9 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchiveIDS
TypeSpecialization ArchiveIDS
{
  #keys: '5[413988.0.1193510179][413988.0.1193510177][0.0.0][413988.0.1193510178][413988.0.1193510180]'
  BaseType: Object
  #keys: '2[414996.1.137364717][413988.0.1193510177]'
  Parent: ArchiveFile
  StructuredName: 'ArchiveIDSs'
}
_Main/BL/Type_ArchivePP/Attribute_DateTime.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePP/Attribute_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePP/Attribute_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePP/Attribute_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePP/DefaultValue_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePP/DefaultValue_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePP/DefaultValue_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePP/_ROOT_Type_ArchivePP.qbl
@@ -1,9 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchivePP
TypeSpecialization ArchivePP
{
  #keys: '5[413988.0.1193510109][413988.0.1193510107][0.0.0][413988.0.1193510108][413988.0.1193510110]'
  BaseType: Object
  #keys: '2[414996.1.137364707][413988.0.1193510107]'
  Parent: ArchiveFile
  StructuredName: 'ArchivePPs'
}
_Main/BL/Type_ArchivePPA/Attribute_DateTime.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePPA/Attribute_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePPA/Attribute_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePPA/Attribute_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePPA/_ROOT_Type_ArchivePPA.qbl
@@ -1,9 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchivePPA
TypeSpecialization ArchivePPA
{
  #keys: '5[413988.0.1174013542][413988.0.1174013540][0.0.0][413988.0.1174013541][413988.0.1174013543]'
  BaseType: Object
  #keys: '2[414996.1.137364700][413988.0.1174013540]'
  Parent: ArchiveFile
  StructuredName: 'ArchivePPAs'
}
_Main/BL/Type_ArchivePR/Attribute_DateTime.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePR/Attribute_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePR/Attribute_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePR/Attribute_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePR/DefaultValue_FilePath.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePR/DefaultValue_Name.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePR/DefaultValue_UserName.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ArchivePR/_ROOT_Type_ArchivePR.qbl
@@ -1,9 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchivePR
TypeSpecialization ArchivePR
{
  #keys: '5[413988.0.1179741542][413988.0.1179741540][0.0.0][413988.0.1179741541][413988.0.1179741543]'
  BaseType: Object
  #keys: '2[414996.1.137244682][413988.0.1179741540]'
  Parent: ArchiveFile
  StructuredName: 'ArchivePRs'
}
_Main/BL/Type_Forecast/StaticMethod_SplitUsingCurve.qbl
@@ -19,7 +19,7 @@
    OS::CreateDirectory( filePath );
    
    macroPlan := salesSegment.MacroPlan();
    ac := select( archive, ArchiveCurve, tempAC, true );
    ac := select( archive, ArchiveFile.astype( ArchiveCurve ), tempAC, true );
    
    pathCurve     := filePath + ac.Name();
    Archive::WriteTempFile( pathCurve, ac.SourceFileBinaryValue() );
_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_ComparedNew.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
Quintiq file version 2.0
#parent: #root
StaticMethod ComparedNew (
  RecycleBin recycleBin,
  const NewOfflinePlanTable baseOfflinePlan,
  const NewOfflinePlanTable compareOfflinePlan
) as LocalTable
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    table := recycleBin.LocalTable( relnew,Name := LocalCell_OfflinePlanComparison::GetTableName());
    localColumns := construct( LocalColumns );
    localColumnIndexTree := NamedValueTree::Create();
    traverse( baseOfflinePlan,NewOfflinePlanColumn,column,column.StartDate() >=  baseOfflinePlan.MacroPlan().StartOfPlanning().Date()){
      localColumnHandle := localColumnIndexTree.GetHandle( column.StartDate().AsQUILL() );
      localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
      if( isnull( localColumnIndex )){
        localColumn := table.LocalColumn( relnew,CustomDate := column.StartDate());
        localColumns.Add( localColumn );
        localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
      }
    }
    traverse( compareOfflinePlan,NewOfflinePlanColumn,column,column.StartDate() >=  compareOfflinePlan.MacroPlan().StartOfPlanning().Date()){
      localColumnHandle := localColumnIndexTree.GetHandle( column.StartDate().AsQUILL() );
      localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
      if( isnull( localColumnIndex )){
        localColumn := table.LocalColumn( relnew,CustomDate := column.StartDate());
        localColumns.Add( localColumn );
        localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
      }
    }
    baseOfflinePlanCells := construct( NewOfflinePlanCells, constcontent );
    baseOfflinePlanCellIndexTree := NamedValueTree::Create();
    compareOfflinePlanCells := construct( NewOfflinePlanCells, constcontent );
    compareOfflinePlanCellIndexTree := NamedValueTree::Create();
    localRows := construct( LocalRows );
    localRowIndexTree := NamedValueTree::Create();
    traverse( baseOfflinePlan,NewOfflinePlanRow,row,row.Type() = "1" ){
      rowKey := row.ProductID() + "@$#" + row.ProductionLine()+ "@$#";
      localRowHandle := localRowIndexTree.GetHandle( rowKey );
      localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
      if( isnull( localRowIndex )){
        localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := row.ProductID(),Remark := rowKey );
        localRows.Add( localRow );
        localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
      }
      traverse( row,NewOfflinePlanCell,cell ){
        columnKey := cell.NewOfflinePlanColumn().StartDate().AsQUILL();
        cellKey := rowKey + columnKey;
        cellHandle := baseOfflinePlanCellIndexTree.GetHandle( cellKey );
        baseOfflinePlanCells.Add( cell );
        baseOfflinePlanCellIndexTree.Root().AddChild( cellHandle,baseOfflinePlanCells.Size() - 1 );
      }
    }
    traverse( compareOfflinePlan,NewOfflinePlanRow,row,row.Type() = "1" ){
      rowKey := row.ProductID() + "@$#" + row.ProductionLine()+ "@$#";
      localRowHandle := localRowIndexTree.GetHandle( rowKey );
      localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
      if( isnull( localRowIndex )){
        localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := row.ProductID(),Remark := rowKey );
        localRows.Add( localRow );
        localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
      }
      traverse( row,NewOfflinePlanCell,cell ){
        columnKey := cell.NewOfflinePlanColumn().StartDate().AsQUILL();
        cellHandle := compareOfflinePlanCellIndexTree.GetHandle( rowKey + columnKey );
        compareOfflinePlanCells.Add( cell );
        compareOfflinePlanCellIndexTree.Root().AddChild( cellHandle,compareOfflinePlanCells.Size() - 1 );
      }
    }
    traverse( localRows,Elements,localRow ){
      rowKey := localRow.Remark();
      traverse( localColumns,Elements,localColumn ){
        columnKey := localColumn.CustomDate().AsQUILL();
        cellKey := rowKey + columnKey;
        baseOfflinePlanCell := constnull( NewOfflinePlanCell );
        compareOfflinePlanCell := constnull( NewOfflinePlanCell );
        baseOfflinePlanCellIndex := guard( baseOfflinePlanCellIndexTree.Root().Child( baseOfflinePlanCellIndexTree.GetHandle( cellKey ) ),null( NamedValue ));
        compareOfflinePlanCellIndex := guard( compareOfflinePlanCellIndexTree.Root().Child( compareOfflinePlanCellIndexTree.GetHandle( cellKey ) ),null( NamedValue ));
        if( not isnull( baseOfflinePlanCellIndex )){
          baseOfflinePlanCell := baseOfflinePlanCells.Element( baseOfflinePlanCellIndex.GetValueAsNumber() );
        }
        if( not isnull( compareOfflinePlanCellIndex )){
          compareOfflinePlanCell := compareOfflinePlanCells.Element( compareOfflinePlanCellIndex.GetValueAsNumber() );
        }
        localRow.LocalCell( relnew,LocalCell_OfflinePlanComparison,LocalColumn := localColumn,
                            BaseVersion := ifexpr( isnull( baseOfflinePlanCell),0.0,baseOfflinePlanCell.Quantity()),
                            CompareVersion := ifexpr( isnull( compareOfflinePlanCell),0.0,compareOfflinePlanCell.Quantity()));
      }
    }
    traverse( table,LocalColumn,column ){
      if( column.LocalCell( relsize ) = 0 ){
        column.Delete();
      }
    }
    return table;
  *]
}
_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl
@@ -6,7 +6,7 @@
{
  TextBody:
  [*
    // rislai Aug-6-2024 (created)
      // rislai Aug-6-2024 (created)
    table := select( owner,MP_Table,table,table.Name() = MP_Cell_ScheduleSummary::GetTableName() );
    if( not isnull( table )){
      table.Delete(); 
_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl
@@ -5,13 +5,39 @@
  ShiftPattern shiftPattern,
  Date startDate,
  Date endDate,
  Numbers weekdays
  Numbers weekdays,
  Number skipWeek
)
{
  TextBody:
  [*
    // Akari Oct-10-2024 (created)
    owner := unit.MacroPlan();
    saveDays := construct( Dates );
    flag := startDate.StartOfNextWeek();
    for( i := startDate; i<endDate; i := i + 1 ){
      if( i < flag ){
        saveDays.Add( i );
      }else{
        temp := skipWeek - 1;
        while( temp > 0 ){
          i := flag;
          flag := i.StartOfNextWeek();
          temp--;
          info( i.Format( "Y-M2-D2") );
          info( flag.Format( "Y-M2-D2") );
        }
      }
    }
    info( "----------------------------");
    traverse( saveDays,Elements,element ){
      info( element.Format( "Y-M2-D2"));
    }
    dayPeriod_MPs := selectsortedset( owner,Period_MP,period_MP, 
                                      period_MP.TimeUnit() = 'Day' and 
                                      period_MP.StartDate() >= startDate and 
@@ -21,16 +47,16 @@
                                       period_MP.StartDate() >= startDate and 
                                       period_MP.EndDate() <= endDate and exists( weekdays, Elements,dayOfWeek,dayOfWeek = period_MP.StartDate().DayOfWeek() ),period_MP.StartDate());
    
    if( dayPeriod_MPs.Size() > 0 ){
      unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( dayPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability()));
      unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( dayPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
      if( unitPeriodTimes.Size() > 0 ){
        LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern );
      }
    }
    if( weekPeriod_MPs.Size() <> 0 ){
      traverse( weekPeriod_MPs,Elements,period_MP ){
        unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability()));
        unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP());
        if( unitPeriodTimes.Size() > 0 ){
          LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern );
        }
_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
Quintiq file version 2.0
#parent: #root
StaticMethod BatchSetUnitShiftPattern (
  Unit unit,
  ShiftPattern shiftPattern,
  Date startDate,
  Date endDate,
  Number skipDay
)
{
  TextBody:
  [*
    // Akari Oct-10-2024 (created)
    owner := unit.MacroPlan();
    saveDays := construct( Dates );
    for( i := startDate; i < endDate; i := i + skipDay ){
      saveDays.Add( i );
    }
    dayPeriod_MPs := selectsortedset( owner,Period_MP,period_MP,
                                      period_MP.TimeUnit() = 'Day' and
                                      period_MP.StartDate() >= startDate and
                                      period_MP.EndDate() <= endDate and exists( saveDays, Elements,day,day = period_MP.StartDate()) ,period_MP.StartDate());
    weekPeriod_MPs := selectsortedset( owner,Period_MP,period_MP,
                                       period_MP.TimeUnit() = 'Week' and
                                       period_MP.StartDate() >= startDate and
                                       period_MP.EndDate() <= endDate and exists( saveDays, Elements,day,day = period_MP.StartDate()) ,period_MP.StartDate());
    if( dayPeriod_MPs.Size() > 0 ){
      unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( dayPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
      if( unitPeriodTimes.Size() > 0 ){
        info( unitPeriodTimes.Size() );
        LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern );
      }
    }
    if( weekPeriod_MPs.Size() <> 0 ){
      unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( weekPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
      if( unitPeriodTimes.Size() > 0 ){
        LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern );
      }
    }
  *]
}
_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl
@@ -47,6 +47,21 @@
      }
    }
    
    traverse( unitPeriodTimes,Elements,unitPeriodTime,isnull( unitPeriodTime.UnitAvailability())){
    //  UnitAvailability::Create( unitPeriodTime.Unit(),
    //                            unitPeriodTime.Start(),
    //                            timeunit,
    //                            maintenance,
    //                            efficiency,
    //                            allocation,
    //                            shiftPattern,
    //                            maxloadpercentage,
    //                            nrofunitopen,
    //                            minloadthreshold,
    //                            true );
      unitPeriodTime.CalcUnitAvailability();
    }
    isbatchedit := unitPeriodTimes.Size() > 1;
    UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
                                                        not isbatchedit or false,
@@ -66,5 +81,23 @@
                                                        not isbatchedit or false,
                                                        minloadthreshold
                                                       );
    //UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
    //                                                    not isbatchedit or CheckBoxBatchEditMaintenance.Checked(),
    //                                                    data.TimeUnit(),
    //                                                    data.Maintenance(),
    //                                                    not isbatchedit or CheckBoxBatchEditEfficiency.Checked(),
    //                                                    data.Efficiency(),
    //                                                    false,
    //                                                    data.Allocation(),
    //                                                    not isbatchedit or CheckBoxBatchEditShiftPattern.Checked(),
    //                                                    data.ShiftPattern(),
    //                                                    not isbatchedit or CheckBoxBatchEditMaxLoadPercentage.Checked(),
    //                                                    data.MaximumLoadPercentage(),
    //                                                    not isbatchedit or CheckBoxBatchEditNrOfUnitsOpen.Checked(),
    //                                                    data.NrOfUnitsOpen(),
    //                                                    DataHolderFromThisPeriodOnward.Data(),
    //                                                    not isbatchedit or CheckBoxBatchEditMinimumLoadThreshold.Checked(),
    //                                                    data.MinimumLoadThreshold()
    //                                                   );
  *]
}
_Main/BL/Type_NewOfflinePlanCell/Method_GetNewOfflinePlanMatrixTooltip.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
Method GetNewOfflinePlanMatrixTooltip () declarative remote as String
{
  TextBody:
  [*
    tooltip := '<table>';
    tooltip := tooltip
                 + '<tr><td><b>总量:</b></td><td>'         + [String]this.Total().TotalQuantity() + '</td></tr>'
                 + '<tr><td><b>班次名:</b></td><td>'       + this.Total().ShiftPatternName()      + '</td></tr>'
                 + '<tr><td><b>班次开始时间:</b></td><td>' + this.Total().ShiftPatternStart()     + '</td></tr>'
                 + '<tr><td><b>班次结束时间:</b></td><td>' + this.Total().ShiftPatternEnd()       + '</td></tr>';
    tooltip := tooltip + '</table>';
    return tooltip;
  *]
}
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_DeductionOfReplacementLoss.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
Quintiq file version 2.0
#parent: #root
StaticMethod DeductionOfReplacementLoss (
  MacroPlan macroPlan,
  NewOfflinePlanTable nopt
)
{
  TextBody:
  [*
    // ä¿å­˜ä¸Šä¸€ä»½å­˜æ¡£
    newNOPT := NewOfflinePlanCell::SaveAsDraft( macroPlan, nopt );
    // æ‰§è¡Œæ¢åž‹æŸå¤±
    allProductionLines := selectuniquevalues( newNOPT, NewOfflinePlanRow, tempNOPR, true, tempNOPR.ProductionLine() );
    traverse ( allProductionLines, Elements, pl
    //           , pl = "eMotor Assy (France)"
             )
    {
      // ä¸‹çº¿è®¡åˆ’当前产线下的行
      noprs      := selectset( newNOPT, NewOfflinePlanRow, tempNOPR, tempNOPR.ProductionLine() = pl and tempNOPR.Type() = "1" );
      // ä¸Šä¸€ä¸ªç”Ÿäº§çš„产品Cell
      preNOPCell := null( NewOfflinePlanCell );
      traverse ( newNOPT, NewOfflinePlanColumn, nopc
    //             , nopc.StartDate() >= macroPlan.StartOfPlanning().Date() and nopc.StartDate() <= Date::Construct( 2024, 4, 17 ) // æµ‹è¯•时可以过滤时间
               )
      {
        for ( i := 1; i < 10; i++ ) {
          nopcell := select( noprs, Elements.NewOfflinePlanCell, tempNOPC, tempNOPC.NewOfflinePlanColumn() = nopc and tempNOPC.OrderNr() = i );
          // æ¢åž‹æŸå¤±å‚æ•°
          cls     := select( macroPlan, ChangeLossSetting, tempCLS,
                             tempCLS.ProductFirst().ID()  = guard( preNOPCell.NewOfflinePlanRow().ProductID(), "" ) and
                             tempCLS.ProductSecond().ID() = guard( nopcell.NewOfflinePlanRow().ProductID(), "" )    and
                             tempCLS.StartDate()          <= nopc.StartDate()                                       and
                             tempCLS.EndDate()            >= nopc.StartDate()
                            );
          // æ‰£å‡æ¢åž‹æŸå¤±
          if ( not isnull( preNOPCell ) and not isnull( nopcell ) and not isnull( cls ) ) {
            preNOPCell.Quantity( preNOPCell.Quantity() - cls.ChangeLossNumber() );
    //        info( "当前列时间:", nopc.StartDate().Format( "Y-M2-D2" ),
    //              "    ä¸Šä¸€ä¸ªäº§å“å½“前序号:", preNOPCell.Order(), "    ä¸Šä¸€ä¸ªäº§å“æ•°é‡ï¼š", preNOPCell.Quantity(), "    ä¸Šä¸€ä¸ªäº§å“åï¼š", preNOPCell.NewOfflinePlanRow().ProductID(),
    //              "    å½“前产品序号:"      , nopcell.Order()   , "    å½“前产品数量:"     , nopcell.Quantity(), "    å½“前产品名:"  , nopcell.NewOfflinePlanRow().ProductID() );
          }
          // è®¾ç½®ä¸Šä¸€ä¸ªç”Ÿäº§çš„产品Cell
          if ( not isnull( nopcell ) ) {
            preNOPCell := nopcell;
          }
        }
      }
    }
  *]
}
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl
@@ -41,7 +41,7 @@
          // ç”Ÿæˆä¸‹çº¿è®¡åˆ’【产线明细】行
          detailedNOPR   := select( nopt, NewOfflinePlanRow, tempNOPR, tempNOPR.ProductionLine() = u.ID() and tempNOPR.ProductID() = pisp.ProductID() and tempNOPR.Type() = "1" );
          if ( isnull( detailedNOPR ) ) {
            detailedNOPR := nopt.NewOfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := pisp.ProductID(), Type := "1" );
            detailedNOPR := nopt.NewOfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := pisp.ProductID(), Type := "1", OperationID := o.ID() );
          }
          
          // ç”Ÿæˆä¸‹çº¿è®¡åˆ’列
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_SynchronizeToNewSupply.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeToNewSupply (
  MacroPlan macroPlan,
  NewOfflinePlanTable nopt
)
{
  TextBody:
  [*
    traverse ( nopt, NewOfflinePlanRow.NewOfflinePlanCell, cell,
               cell.NewOfflinePlanRow().Type() = "1" and cell.Quantity() > 0.0
    //           and cell.NewOfflinePlanRow().ProductionLine() = "eMotor Assy (France)" and cell.NewOfflinePlanColumn().StartDate() = Date::Construct( 2020, 4, 4 )
             )
    {
     pto := select( macroPlan, Unit.Operation.PeriodTaskOperation, tempPTO,
                    exists( tempPTO, NewSupply, tempNS, tempNS.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() = cell.NewOfflinePlanRow().ProductID() ) and
                    tempPTO.Operation().UnitID() = cell.NewOfflinePlanRow().ProductionLine()                                                                                                 and
                    tempPTO.Start().Date()       = cell.NewOfflinePlanColumn().StartDate() );
      if ( isnull( pto ) ) {
        o  := select( macroPlan, Unit.Operation, tempO, tempO.ID() = cell.NewOfflinePlanRow().OperationID() );
        up := select( macroPlan, Unit.UnitPeriod, tempUP, tempUP.UnitID() = cell.NewOfflinePlanRow().ProductionLine() and tempUP.StartDate() = cell.NewOfflinePlanColumn().StartDate() );
        if ( not isnull( o ) and not isnull( up ) ) {
          PeriodTaskOperation::Create( o, up, cell.Quantity(), false );
        }
      } else {
        if ( [Number]cell.Quantity() <> [Number]pto.Quantity() ) {
          pto.Update( cell.Quantity(), false );
        }
      }
    }
  *]
}
_Main/BL/Type_NewOfflinePlanRow/Attribute_OperationID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute OperationID
{
  #keys: '3[413988.0.1695608112][413988.0.1695608111][413988.0.1695608113]'
  ValueType: String
}
_Main/BL/Type_NewOfflinePlanTable/Method_Comparison.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
Quintiq file version 2.0
#parent: #root
Method Comparison (
  RecycleBin recycleBin,
  const Archive archive
) as LocalTable
{
  TextBody:
  [*
    // rislai Jul-17-2024 (created)
    macroPlan := this.MacroPlan();
    table := recycleBin.LocalTable( relnew,Name := LocalCell_ProductionComparison::GetTableName());
    actualDailyProductionDatas := selectset( archive,ActualDailyProductionData,data,true );
    actualDailyProductionDataIndexTree := NamedValueTree::Create();
    for( i := 0; i< actualDailyProductionDatas.Size(); i++ ){
      actualDailyProductionData := actualDailyProductionDatas.Element( i );
      actualDailyProductionDataKey := actualDailyProductionData.ProductNo() + actualDailyProductionData.ProductionDate().AsQUILL();
      actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
      actualDailyProductionDataIndexTree.Root().AddChild( actualDailyProductionDataHandle,i );
    }
    localColumns := construct( LocalColumns );
    localColumnIndexTree := NamedValueTree::Create();
    traverse( this,NewOfflinePlanColumn,column,column.StartDate() >=  macroPlan.StartOfPlanning().Date()){
      localColumn := table.LocalColumn( relnew,CustomDate := column.StartDate());
      localColumnHandle := localColumnIndexTree.GetHandle( column.StartDate().AsQUILL() );
      localColumns.Add( localColumn );
      localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
    }
    traverse( this,NewOfflinePlanRow,row,row.Type() = "1" ){
      productID := row.ProductID();
      // productLine := row.ProductionLine();
      localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := productID );
      traverse( row,NewOfflinePlanCell,cell,cell.NewOfflinePlanColumn().StartDate() >= macroPlan.StartOfPlanning().Date() ){
        localColumnHandle := localColumnIndexTree.GetHandle( cell.NewOfflinePlanColumn().StartDate().AsQUILL() );
        localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
        if( not isnull( localColumnIndex )){
          actualDailyProductionDataKey := productID + cell.NewOfflinePlanColumn().StartDate().AsQUILL();
          actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
          actualDailyProductionDataIndex := guard( actualDailyProductionDataIndexTree.Root().Child( actualDailyProductionDataHandle ),null( NamedValue ));
          actualDailyProductionVolume := 0.0;
          if( not isnull( actualDailyProductionDataIndex )){
            actualDailyProductionData := actualDailyProductionDatas.Element( actualDailyProductionDataIndex.GetValueAsNumber() );
            actualDailyProductionVolume := actualDailyProductionData.ActualOut();
          }
          localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() );
          localRow.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := localColumn,
                                           Plan := cell.Quantity(),Actual := actualDailyProductionVolume );
        }
      }
    }
    traverse( table,LocalColumn,column ){
      if( column.LocalCell( relsize ) = 0 ){
        column.Delete();
      }
    }
    // maxCellCount := table.LocalRow( relsize );
    //traverse( table,LocalColumn,column ){
    //  cellIndexTree := NamedValueTree::Create();
    //  columnKey := column.CustomDate().AsQUILL();
    //  count := 0;
    //  traverse( column,LocalCell,cell ){
    //    rowKey := cell.LocalRow().CustomName();
    //    cellHandle := cellIndexTree.GetHandle( rowKey + columnKey );
    //    cellIndexTree.Root().AddChild( cellHandle,count );
    //    count++;
    //  }
    //  traverse( table,LocalRow,row ){
    //    rowKey := row.CustomName();
    //    cellHandle := cellIndexTree.GetHandle( rowKey + columnKey );
    //    cellCount := guard( cellIndexTree.Root().Child( cellHandle ),null( NamedValue ));
    //    if( isnull( cellCount )){
    //      row.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := column,
    //                     Plan := 0,Actual := 0 );
    //    }
    //  }
    //}
    traverse( table,LocalRow,row ){
      cellCountTree := NamedValueTree::Create();
      traverse( row,LocalCell,cell ){
        cellHandle := cellCountTree.GetHandle( cell.LocalColumn().CustomDate().AsQUILL());
        cellCountTree.Root().AddChild( cellHandle,0 );
      }
      traverse( table,LocalColumn,column ){
        cellHandle := cellCountTree.GetHandle( column.CustomDate().AsQUILL());
        cell := guard( cellCountTree.Root().Child( cellHandle ),null( NamedValue ));
        if( isnull( cell )){
          row.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := column,Plan := 0,Actual := 0 );
        }
      }
    }
    return table;
  *]
}
_Main/BL/Type_OfflinePlanTableInfo/Function_CalcTableName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcTableName
{
  TextBody:
  [*
    // Akari Oct-15-2024 (created)
    value := this.TableSaveTime().Format( "Y-M2-D2 H:m:s" )
    this.TableName( value );
  *]
}
_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl
@@ -15,7 +15,7 @@
      name := macroPlan.MDSMacroPlan().Description();
      
      traverse( macroPlan,OfflinePlanTable,offlinePlanTable ){
        owner.OfflinePlanTableInfo( relnew,MacroPlanName := name,TableName := offlinePlanTable.SaveDateTime().Format( "Y-M2-D2 H:m:s" ),MacroPlanMDSID := mdsid ,TableSaveTime := offlinePlanTable.SaveDateTime());
        owner.OfflinePlanTableInfo( relnew,MacroPlanName := name,MacroPlanMDSID := mdsid ,TableSaveTime := offlinePlanTable.SaveDateTime());
      }
    }
    info( owner.OfflinePlanTableInfo( relsize ) );
_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_CreateNew.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateNew (
  const constcontent MacroPlans macroPlans,
  RecycleBin owner
)
{
  TextBody:
  [*
    // Akari Oct-14-2024 (created)
    owner.OfflinePlanTableInfo( relflush );
    info( macroPlans.Size() );
    traverse( macroPlans,Elements,macroPlan ){
      mdsid := macroPlan.MDSID();
      name := macroPlan.MDSMacroPlan().Description();
      traverse( macroPlan,NewOfflinePlanTable,offlinePlanTable ){
        owner.OfflinePlanTableInfo( relnew,MacroPlanName := name,MacroPlanMDSID := mdsid ,TableSaveTime := offlinePlanTable.SaveDateTime());
      }
    }
    info( owner.OfflinePlanTableInfo( relsize ) );
  *]
}
_Main/BL/Type_ProductionLineBatchData/Method_OnOK.qbl
@@ -8,81 +8,6 @@
  TextBody:
  [*
    // rislai Jun-9-2024 (created)
    firstElement := minselect( unitPeriodTimes, Elements, e, true, e.Start() );
    start := this.MacroPlan().Start();
    timeunit := this.MacroPlan().StartOfPlanningPeriod().TimeUnit();
    maintenance := Duration::Zero();
    efficiency := 1.0;
    allocation := 1.0;
    maxloadpercentage := this.MacroPlan().GlobalParameters_MP().DefaultMaxLoadPercentage();
    nrofunitopen := 1;
    minloadthreshold := 0.0;
    if( not isnull( firstElement ) ){
      // To inherit the value from last unit availability while creating a new unit availability
      unitavailability := firstElement.UnitAvailability();
      start := firstElement.Start();
      if( not isnull( unitavailability ) ){
        timeunit := unitavailability.TimeUnit();
        maintenance := unitavailability.Maintenance();
        efficiency := unitavailability.Efficiency();
        allocation := unitavailability.Allocation();
        maxloadpercentage := unitavailability.MaximumLoadPercentage();
        nrofunitopen := unitavailability.NrOfUnitsOpen();
        minloadthreshold := unitavailability.MinimumLoadThreshold();
      }else{
        timeunit := firstElement.Period_MP().TimeUnit();
        maintenance := firstElement.Maintenance();
        efficiency := firstElement.Efficiency();
        allocation := firstElement.Allocation();
        maxloadpercentage := firstElement.MaximumLoadPercentage();
        nrofunitopen := firstElement.NrOfOpen();
        minloadthreshold := firstElement.MinimumLoadThreshold();
      }
    }
    isbatchedit := unitPeriodTimes.Size() > 1;
    UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
                                                        not isbatchedit or false,
                                                        timeunit,
                                                        maintenance,
                                                        not isbatchedit or false,
                                                        efficiency,
                                                        false,
                                                        allocation,
                                                        not isbatchedit or true,
                                                        shiftPattern,
                                                        not isbatchedit or false,
                                                        maxloadpercentage,
                                                        not isbatchedit or false,
                                                        nrofunitopen,
                                                        false,
                                                        not isbatchedit or false,
                                                        minloadthreshold
                                                       );
    //UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
    //                                                    not isbatchedit or CheckBoxBatchEditMaintenance.Checked(),
    //                                                    data.TimeUnit(),
    //                                                    data.Maintenance(),
    //                                                    not isbatchedit or CheckBoxBatchEditEfficiency.Checked(),
    //                                                    data.Efficiency(),
    //                                                    false,
    //                                                    data.Allocation(),
    //                                                    not isbatchedit or CheckBoxBatchEditShiftPattern.Checked(),
    //                                                    data.ShiftPattern(),
    //                                                    not isbatchedit or CheckBoxBatchEditMaxLoadPercentage.Checked(),
    //                                                    data.MaximumLoadPercentage(),
    //                                                    not isbatchedit or CheckBoxBatchEditNrOfUnitsOpen.Checked(),
    //                                                    data.NrOfUnitsOpen(),
    //                                                    DataHolderFromThisPeriodOnward.Data(),
    //                                                    not isbatchedit or CheckBoxBatchEditMinimumLoadThreshold.Checked(),
    //                                                    data.MinimumLoadThreshold()
    //                                                   );
    LocalTool::SetUnitShiftPattern( this.MacroPlan(),unitPeriodTimes,shiftPattern );
  *]
}
_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl
@@ -29,7 +29,8 @@
                                              RowNr                   := rowNr,
                                              SourceStockpoingPointID := TransferPlanRow::IdentifyTheFactory( t.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP() ),
                                              TargetStockpoingPointID := TransferPlanRow::IdentifyTheFactory( t.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP() ),
                                              ProductID               := pit.Product_MP().ID() );
                                              ProductID               := pit.Product_MP().ID(),
                                              Category                := pit.Product_MP().ParentID() );
          }
          
          // æ‰¾åˆ—
@@ -77,7 +78,7 @@
    minDateTPC := macroPlan.TransferPlanColumn( relnew,
                                                ColumnDate := Date::MinDate() );
    traverse ( macroPlan, TransferPlanRow, tpr ) {
      productCell := minDateTPC.TransferPlanCell( relnew, Value := tpr.ProductID() );
      productCell := minDateTPC.TransferPlanCell( relnew, Value := tpr.Category() + "_" + tpr.ProductID() );
      productCell.TransferPlanRow( relset, tpr );
    }
    
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
@@ -124,6 +124,17 @@
        Title: 'Inventory report'
      ]
    }
    Component mOfflinePlanInterface
    {
      #keys: '[413988.0.1697411489]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'WIND_ENGINE_OFFSHORE'
        Taborder: 11
        Title: '下线计划'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
@@ -34,6 +34,7 @@
        Image: 'LIGHTBULB'
        Label: 'Output plan'
        Taborder: 1
        Visible: false
      ]
    }
    Component bAssemblyOnlinePlan
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mOfflinePlanInterface_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: ContextMenuInterface/mOfflinePlanInterface
Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_mOfflinePlanInterface_OnClick
{
  #keys: '[413988.0.1697411525]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
  *]
  QuillAction
  {
    Body:
    [*
      // å­˜æ¡£
      NewOfflinePlanCell::InterfaceArchive( MacroPlan, InterfaceDataset );
      WebMessageBox::Success( Translations::A_VWED_Success() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPAArchive.def
@@ -31,7 +31,7 @@
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePPA'
            Transformation: 'ArchiveFile.astype( ArchivePPA )'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def
@@ -18,7 +18,7 @@
        dhLocalOriginalFileNameCurve.Data( guard( dhOriginalFileNameCurve.Data(), "" ) );
        
        // æ›¿æ¢å…¨å±€Curve为上一版Curve
        previousAC := select( Archive, ArchiveCurve, tempAC, true );
        previousAC := select( Archive, ArchiveFile.astype( ArchiveCurve ), tempAC, true );
        dhBinaryDataCurve.Data( BinaryData::FromBase64EncodedString( previousAC.SourceFileBinaryValue().AsBase64EncodedString() ) );
        dhOriginalFileNameCurve.Data( previousAC.Name() );
      } else {
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelFilter.def
@@ -86,6 +86,16 @@
        Taborder: 6
      ]
    }
    Component ButtonClearFilter id:ButtonClearFilter_414
    {
      #keys: '[414996.1.137702887]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Clear'
        Taborder: 8
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504#801.def
@@ -18,10 +18,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[OfflinePlanTableInfo]'
            Source: 'dhOfflinePlanTables'
            DataType: 'RecycleBin'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'Elements'
            Transformation: 'OfflinePlanTableInfo'
          ]
        }
      ]
@@ -55,10 +55,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[OfflinePlanTableInfo]'
            Source: 'dhOfflinePlanTables'
            DataType: 'RecycleBin'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'Elements'
            Transformation: 'OfflinePlanTableInfo'
          ]
        }
      ]
@@ -69,31 +69,6 @@
        Taborder: 1
      ]
    }
    Component dhOfflinePlanTables
    {
      #keys: '[414996.1.103241339]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[OfflinePlanTableInfo]*'
      Children:
      [
        Component deOfflinePlanTables
        {
          #keys: '[414996.1.124700546]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'RecycleBin'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'OfflinePlanTableInfo'
          ]
        }
      ]
      Properties:
      [
        Taborder: 4
      ]
    }
    Component bExport
    {
      #keys: '[414996.1.104721685]'
@@ -101,7 +76,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 5
        Taborder: 3
      ]
    }
    Component dhXMLDataListener
@@ -127,16 +102,7 @@
      ]
      Properties:
      [
        Taborder: 6
      ]
    }
    Component ButtonRibbon
    {
      #keys: '[414996.1.125429607]'
      BaseType: 'WebButton'
      Properties:
      [
        Taborder: 3
        Taborder: 4
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_OnCreated.def
@@ -8,5 +8,10 @@
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
      OfflinePlanTableInfo::CreateNew( macroPlans,RecycleBin );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelFilter_ButtonClearFilter_OnClick#466.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelFilter/ButtonClearFilter_414
Response OnClick () id:Response_PanelFilter_119_ButtonClearFilter_OnClick_466
{
  #keys: '[414996.1.137702886]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      ddslGeneration.Text( "<All>" );
      ddslMQBMLB.Text( "<All>" );
      ddslPower.Text( "<All>" )
      dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelFilter_ButtonFilter_OnClick.def
@@ -10,15 +10,15 @@
  {
    Body:
    [*
      products := dhCheckedProduct.Data().Copy();
      products := dhFinelProduct.Data().Copy();
      if( ddslGeneration.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
        products := selectset( products,Elements,element,element.Generation() = ddslGeneration.Text());
      }
      if( ddslMQBMLB.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.MQBMLB() <> ddslMQBMLB.Text());
        products := selectset( products,Elements,element,element.MQBMLB() = ddslMQBMLB.Text());
      }
      if( ddslPower.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Power() <> ddslPower.Text());
        products := selectset( products,Elements,element,element.Power() = ddslPower.Text());
      }
      dhFinelProduct.Data( &products );
    *]
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
@@ -11,13 +11,13 @@
    [*
      baseOfflineTableInfo := ddlBaseOfflinePlanTable.Data();
      baseMacroPlan := ApplicationMacroPlanner.GetMacroPlanByMDSID( baseOfflineTableInfo );
      baseVersion := select( baseMacroPlan ,OfflinePlanTable,table,table.SaveDateTime() = baseOfflineTableInfo.TableSaveTime() );
      baseVersion := select( baseMacroPlan ,NewOfflinePlanTable,table,table.SaveDateTime() = baseOfflineTableInfo.TableSaveTime() );
      
      compareOfflineTableInfo := ddlCompareOfflinePlanTable.Data();
      compareMacroPlan := ApplicationMacroPlanner.GetMacroPlanByMDSID( compareOfflineTableInfo );
      compareVersion := select( compareMacroPlan ,OfflinePlanTable,table,table.SaveDateTime() = compareOfflineTableInfo.TableSaveTime() );
      compareVersion := select( compareMacroPlan ,NewOfflinePlanTable,table,table.SaveDateTime() = compareOfflineTableInfo.TableSaveTime() );
      
      dhTable.Data( LocalCell_OfflinePlanComparison::Compared( RecycleBin,baseVersion,compareVersion ));
      dhTable.Data( LocalCell_OfflinePlanComparison::ComparedNew( RecycleBin,baseVersion,compareVersion ));
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated#57.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation#568.def
@@ -12,7 +12,7 @@
      Properties:
      [
        Label: '开始对比'
        Taborder: 3
        Taborder: 2
      ]
    }
    Component dhXMLDataListener id:dhXMLDataListener_906
@@ -38,7 +38,7 @@
      ]
      Properties:
      [
        Taborder: 2
        Taborder: 1
      ]
    }
    Component bExport id:bExport_98
@@ -50,17 +50,6 @@
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 0
      ]
    }
    Component bDownload id:bDownload_352
    {
      #keys: '[412672.0.1109203542]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOWNLOAD'
        Label: '下载'
        Taborder: 1
      ]
    }
    #child: pVersionInfomation
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionBudget.def
@@ -21,7 +21,7 @@
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveBudget'
            Transformation: 'ArchiveFile.astype( ArchiveBudget )'
          ]
        }
      ]
@@ -61,7 +61,7 @@
            FixedFilter: 'object.Filter( baseSelection,dateUnit )'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveBudget'
            Transformation: 'ArchiveFile.astype( ArchiveBudget )'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionCurve.def
@@ -21,7 +21,7 @@
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveCurve'
            Transformation: 'ArchiveFile.astype(ArchiveCurve)'
          ]
        }
      ]
@@ -61,7 +61,7 @@
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveCurve'
            Transformation: 'ArchiveFile.astype( ArchiveCurve )'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionIDS.def
@@ -21,7 +21,7 @@
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveIDS'
            Transformation: 'ArchiveFile.astype( ArchiveIDS )'
          ]
        }
      ]
@@ -61,7 +61,7 @@
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveIDS'
            Transformation: 'ArchiveFile.astype( ArchiveIDS )'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPP.def
@@ -21,7 +21,7 @@
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePP'
            Transformation: 'ArchiveFile.astype( ArchivePP )'
          ]
        }
      ]
@@ -61,7 +61,7 @@
            FixedFilter: 'object.Filter( baseSelection,dateUnit )'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePP'
            Transformation: 'ArchiveFile.astype( ArchivePP )'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPPA.def
@@ -21,7 +21,7 @@
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePPA'
            Transformation: 'ArchiveFile.astype( ArchivePPA )'
          ]
        }
      ]
@@ -61,7 +61,7 @@
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePPA'
            Transformation: 'ArchiveFile.astype( ArchivePPA )'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPR.def
@@ -21,7 +21,7 @@
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePR'
            Transformation: 'ArchiveFile.astype(ArchivePR)'
          ]
        }
      ]
@@ -61,7 +61,7 @@
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePR'
            Transformation: 'ArchiveFile.astype(ArchivePR)'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomation.def
@@ -5,49 +5,31 @@
  BaseType: 'WebPanel'
  Children:
  [
    Component dhBaseVersionPath id:dhBaseVersionPath_640
    #child: pVersionInfomationBase
    #child: pVersionInfomationCompare
    Component dhCompareVersion
    {
      #keys: '[412672.0.1119852775]'
      #keys: '[414996.1.137780879]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 2
      ]
    }
    Component dhCompareVersionPath id:dhCompareVersionPath_582
    {
      #keys: '[412672.0.1119852802]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Databinding: 'ArchiveFile'
      Properties:
      [
        Taborder: 3
      ]
    }
    Component lBaseVersionName
    Component dhBaseVersion
    {
      #keys: '[412672.0.1119853064]'
      BaseType: 'WebLabel'
      #keys: '[414996.1.137780892]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchiveFile'
      Properties:
      [
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component lCompareVersionName
    {
      #keys: '[412672.0.1119853066]'
      BaseType: 'WebLabel'
      Properties:
      [
        Label: '对比需求版本:'
        Taborder: 1
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 4
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomationBase.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
Quintiq file version 2.0
Component pVersionInfomationBase
{
  #keys: '[414996.1.137700459]'
  BaseType: 'WebPanel'
  Children:
  [
    Component lBaseVersionName id:lBaseVersionName_774
    {
      #keys: '[414996.1.137700529]'
      BaseType: 'WebLabel'
      Properties:
      [
        DataBinding: 'dhBaseVersion.Data.Name'
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component ButtonDelete
    {
      #keys: '[414996.1.137420506]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DELETE'
        Label: 'Delete'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomationCompare.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
Quintiq file version 2.0
Component pVersionInfomationCompare
{
  #keys: '[414996.1.137700548]'
  BaseType: 'WebPanel'
  Children:
  [
    Component lCompareVersionName id:lCompareVersionName_456
    {
      #keys: '[414996.1.137700586]'
      BaseType: 'WebLabel'
      Properties:
      [
        DataBinding: 'dhCompareVersion.Data.Name'
        Label: '对比需求版本:'
        Taborder: 0
      ]
    }
    Component ButtonDelete2
    {
      #keys: '[414996.1.137740415]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DELETE'
        Label: 'Delete'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def
@@ -12,13 +12,13 @@
    [*
      products := dhFinelProduct.Data().Copy();
      if( ddslGeneration.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
        products := selectset( products,Elements,element,element.Generation() = ddslGeneration.Text());
      }
      if( ddslMQBMLB.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.MQBMLB() <> ddslMQBMLB.Text());
        products := selectset( products,Elements,element,element.MQBMLB() = ddslMQBMLB.Text());
      }
      if( ddslPower.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Power() <> ddslPower.Text());
        products := selectset( products,Elements,element,element.Power() = ddslPower.Text());
      }
      dhFinelProduct.Data( &products );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
@@ -5,12 +5,15 @@
  #keys: '[412672.0.1111643148]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return isnull( dhBaseVersion.Data() ) or isnull( dhCompareVersion.Data() );
  *]
  QuillAction
  {
    Body:
    [*
      table := LocalCell_DemandComparison::Compared( RecycleBin,MacroPlan, dhBaseVersionPath.Data(),dhCompareVersionPath.Data(),lBaseVersionName.Text(),lCompareVersionName.Text() );
      table := LocalCell_DemandComparison::Compared( RecycleBin,MacroPlan, dhBaseVersion.Data().FilePath(),dhCompareVersion.Data().FilePath(),lBaseVersionName.Text(),lCompareVersionName.Text() );
      dhComparisonData.Data( table );
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick#781.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_dhXMLDataListener_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelOperation_568/dhXMLDataListener_906
Response OnDataChanged () id:Response_PanelOperation_568_dhXMLDataListener_OnDataChanged
{
  #keys: '[414996.1.135031114]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      binaryValue := dhXMLDataListener.Data( ).Export();
      Application.Download( LocalCell_DemandComparison::GetTableName() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
      dhXMLDataListener.Data( ).Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_bSelectionChecks703_OnClick.def
@@ -11,10 +11,8 @@
    Body:
    [*
      if( CheckboxBudget.Checked() ){
        dhBaseVersionPath.Data( DropDownListBaseVersionBudget.Data().FilePath() );
        lBaseVersionName.Text( DropDownListBaseVersionBudget.Data().Name() );
        dhCompareVersionPath.Data( DropDownListCompareVersionBudget.Data().FilePath() );
        lCompareVersionName.Text( DropDownListCompareVersionBudget.Data().Name() );
        dhBaseVersion.Data( DropDownListBaseVersionBudget.Data() );
        dhCompareVersion.Data( DropDownListCompareVersionBudget.Data() );
      }
    *]
  }
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_bSelectionChecks422_OnClick.def
@@ -11,10 +11,8 @@
    Body:
    [*
      if( CheckboxCurve.Checked() ){
        dhBaseVersionPath.Data( DropDownListBaseVersionCurve.Data().FilePath() );
        lBaseVersionName.Text( DropDownListBaseVersionCurve.Data().Name() );
        dhCompareVersionPath.Data( DropDownListCompareVersionCurve.Data().FilePath() );
        lCompareVersionName.Text( DropDownListCompareVersionCurve.Data().Name() );
        dhBaseVersion.Data( DropDownListBaseVersionCurve.Data() );
        dhCompareVersion.Data( DropDownListCompareVersionCurve.Data() );
      }
    *]
  }
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_bSelectionChecks289_OnClick.def
@@ -11,10 +11,8 @@
    Body:
    [*
      if( CheckboxIDS.Checked() ){
        dhBaseVersionPath.Data( DropDownListBaseVersionIDS.Data().FilePath() );
        lBaseVersionName.Text( DropDownListBaseVersionIDS.Data().Name() );
        dhCompareVersionPath.Data( DropDownListCompareVersionIDS.Data().FilePath() );
        lCompareVersionName.Text( DropDownListCompareVersionIDS.Data().Name() );
        dhBaseVersion.Data( DropDownListBaseVersionIDS.Data() );
        dhCompareVersion.Data( DropDownListCompareVersionIDS.Data() );
      }
    *]
  }
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_bSelectionChecks253_OnClick.def
@@ -11,10 +11,8 @@
    Body:
    [*
      if( CheckboxPPA.Checked() ){
        dhBaseVersionPath.Data( DropDownListBaseVersionPPA.Data().FilePath() );
        lBaseVersionName.Text( DropDownListBaseVersionPPA.Data().Name() );
        dhCompareVersionPath.Data( DropDownListCompareVersionPPA.Data().FilePath() );
        lCompareVersionName.Text( DropDownListCompareVersionPPA.Data().Name() );
        dhBaseVersion.Data( DropDownListBaseVersionPPA.Data() );
        dhCompareVersion.Data( DropDownListCompareVersionPPA.Data() );
      }
    *]
  }
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_bSelectionChecks687_OnClick.def
@@ -11,10 +11,8 @@
    Body:
    [*
      if( CheckboxPP.Checked() ){
        dhBaseVersionPath.Data( DropDownListBaseVersionPP.Data().FilePath() );
        lBaseVersionName.Text( DropDownListBaseVersionPP.Data().Name() );
        dhCompareVersionPath.Data( DropDownListCompareVersionPP.Data().FilePath() );
        lCompareVersionName.Text( DropDownListCompareVersionPP.Data().Name() );
        dhBaseVersion.Data( DropDownListBaseVersionPP.Data() );
        dhCompareVersion.Data( DropDownListCompareVersionPP.Data() );
      }
    *]
  }
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_bSelectionChecks700_OnClick.def
@@ -11,10 +11,8 @@
    Body:
    [*
      if( CheckboxPR.Checked() ){
        dhBaseVersionPath.Data( DropDownListBaseVersionPR.Data().FilePath() );
        lBaseVersionName.Text( DropDownListBaseVersionPR.Data().Name() );
        dhCompareVersionPath.Data( DropDownListCompareVersionPR.Data().FilePath() );
        lCompareVersionName.Text( DropDownListCompareVersionPR.Data().Name() );
        dhBaseVersion.Data( DropDownListBaseVersionPR.Data() );
        dhCompareVersion.Data( DropDownListCompareVersionPR.Data() );
      }
    *]
  }
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pVersionInfomationBase_ButtonDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pVersionInfomationBase/ButtonDelete
Response OnClick () id:Response_pVersionInfomationBase_ButtonDelete_OnClick
{
  #keys: '[414996.1.137612795]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( WebMessageBox::Question( Translations::MessageBox_ConfirmDeletion( dhBaseVersion.Name() ),Translations::MessageBox_YesNo() ) = 0 ){
        dhBaseVersion.Data().Delete();
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pVersionInfomationCompare_ButtonDelete2_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pVersionInfomationCompare/ButtonDelete2
Response OnClick () id:Response_pVersionInfomationCompare_ButtonDelete2_OnClick
{
  #keys: '[414996.1.137612881]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( WebMessageBox::Question( Translations::MessageBox_ConfirmDeletion( dhBaseVersion.Name() ),Translations::MessageBox_YesNo() ) = 0 ){
        dhCompareVersion.Data().Delete();
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick#715.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor515.def
@@ -86,6 +86,17 @@
    }
    #child: matrixEditorActionBarPage623
    #child: matrixeditorContextMenu229
    Component UserConfigurableInformation675
    {
      #keys: '[413988.0.1697329605]'
      BaseType: 'WebUserConfigurableInformation'
      Properties:
      [
        ObjectType: 'NewOfflinePlanCell'
        Taborder: 5
        Tooltip: 'VALUE( object.GetNewOfflinePlanMatrixTooltip() )'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bConfirm_OnClick.def
@@ -13,8 +13,8 @@
  {
    Body:
    [*
      // å­˜æ¡£
      NewOfflinePlanCell::InterfaceArchive( MacroPlan, InterfaceDataset );
      // åŒæ­¥åˆ°å‘¨æœŸä»»åŠ¡
      NewOfflinePlanCell::SynchronizeToNewSupply( MacroPlan, dhNewOfflinePlanTable.Data() );
      
      // è®¾ç½®æŒ‰é’®ï¼ˆé™¤ä¸‹è½½ï¼‰ä¸å¯ç”¨
      MacroPlan.A_PreviousScenaioName( MacroPlan.ScenarioName() );
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bDeductChangeoverLoss_OnClick.def
@@ -13,6 +13,11 @@
  {
    Body:
    [*
      NewOfflinePlanCell::DeductionOfReplacementLoss( MacroPlan, dhNewOfflinePlanTable.Data() );
      opt := maxselect( MacroPlan, NewOfflinePlanTable, tempNOPT, true, tempNOPT.SaveDateTime() );
      dhNewOfflinePlanTable.Data( opt );
      WebMessageBox::Success( Translations::A_VWED_Success() );
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
@@ -9,7 +9,7 @@
    {
      #keys: '[412672.1.64850982]'
      BaseType: 'WebDropDownList'
      Databinding: 'OfflinePlanTable'
      Databinding: 'OfflinePlanTableInfo'
      Children:
      [
        Component DataExtractorRibbon
@@ -18,16 +18,16 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            DataType: 'RecycleBin'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'OfflinePlanTable'
            Transformation: 'OfflinePlanTableInfo'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'SaveDateTime'
        DisplayField: 'TableName'
        Label: '下线计划:'
        Taborder: 0
      ]
@@ -49,7 +49,7 @@
      Properties:
      [
        DataBinding: 'ddlOfflinePlanTable.Data.SaveDateTime'
        Taborder: 2
        Taborder: 4
      ]
    }
    Component bExport id:bExport_298
@@ -59,7 +59,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 3
        Taborder: 2
      ]
    }
    Component dhXMLDataListener id:dhXMLDataListener_273
@@ -85,7 +85,7 @@
      ]
      Properties:
      [
        Taborder: 4
        Taborder: 3
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
Response OnCreated () id:Response_FormOfflinePlanComparison_OnCreated
{
  #keys: '[414996.1.137702202]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
      OfflinePlanTableInfo::CreateNew( macroPlans,RecycleBin );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
@@ -12,13 +12,13 @@
    [*
      products := dhFinelProduct.Data().Copy();
      if( ddslGeneration.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
        products := selectset( products,Elements,element,element.Generation() = ddslGeneration.Text());
      }
      if( ddslMQBMLB.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.MQBMLB() <> ddslMQBMLB.Text());
        products := selectset( products,Elements,element,element.MQBMLB() = ddslMQBMLB.Text());
      }
      if( ddslPower.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Power() <> ddslPower.Text());
        products := selectset( products,Elements,element,element.Power() = ddslPower.Text());
      }
      dhFinelProduct.Data( &products );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def
@@ -9,7 +9,10 @@
  {
    Body:
    [*
      opt := ddlOfflinePlanTable.Data();
      offlineTableInfo := ddlOfflinePlanTable.Data();
      macroPlan := ApplicationMacroPlanner.GetMacroPlanByMDSID( offlineTableInfo );
      opt := select( macroPlan ,NewOfflinePlanTable,table,table.SaveDateTime() = offlineTableInfo.TableSaveTime() );
      
      dhTable.Data( opt.Comparison( RecycleBin,Archive ));
    *]
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelDaily#478.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component PanelDaily id:PanelDaily_478
{
  #keys: '[414996.1.127440897]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: PanelDaily819
    Component bApply568 id:bApply568_478
    {
      #keys: '[414996.1.127821084]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Apply'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
    Title: 'Daily'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelDaily819.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
Component PanelDaily819
{
  #keys: '[414996.1.126333417]'
  BaseType: 'WebPanel'
  Children:
  [
    Component efDaily
    {
      #keys: '[414996.1.126333418]'
      BaseType: 'WebEditField'
      Properties:
      [
        Label: 'Recur every '
        Taborder: 0
        Text: '1'
      ]
    }
    Component LabelDaily
    {
      #keys: '[414996.1.126333419]'
      BaseType: 'WebLabel'
      Properties:
      [
        Label: 'day(s)'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def
@@ -35,16 +35,6 @@
        Taborder: 0
      ]
    }
    Component bApply
    {
      #keys: '[414996.1.116470621]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Apply'
        Taborder: 11
      ]
    }
    Component ddlShiftPattern
    {
      #keys: '[414996.1.116430349]'
@@ -72,76 +62,7 @@
        Taborder: 1
      ]
    }
    Component cbMonday
    {
      #keys: '[414996.1.117120493]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Monday'
        Taborder: 4
      ]
    }
    Component cbTuesday
    {
      #keys: '[414996.1.117120516]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Tuesday'
        Taborder: 5
      ]
    }
    Component cbWednesday
    {
      #keys: '[414996.1.117120539]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Wednesday'
        Taborder: 6
      ]
    }
    Component cbThursday
    {
      #keys: '[414996.1.117120576]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Thursday'
        Taborder: 7
      ]
    }
    Component cbFriday
    {
      #keys: '[414996.1.117120599]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Friday'
        Taborder: 8
      ]
    }
    Component cbSaturday id:cbSaturday_682
    {
      #keys: '[414996.1.117120636]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Saturday'
        Taborder: 9
      ]
    }
    Component cbSunday
    {
      #keys: '[414996.1.117120659]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Sunday'
        Taborder: 10
      ]
    }
    #child: PanelRight445
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight445.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
Component PanelRight445
{
  #keys: '[414996.1.127440860]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: PanelDaily_478
    #child: PanelWeekly_791
  ]
  Properties:
  [
    Orientation: 'tab-top'
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelWeekly#791.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
Quintiq file version 2.0
Component PanelWeekly id:PanelWeekly_791
{
  #keys: '[414996.1.127440920]'
  BaseType: 'WebPanel'
  Children:
  [
    Component cbMonday
    {
      #keys: '[414996.1.127440921]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Monday'
        Taborder: 1
      ]
    }
    Component cbTuesday
    {
      #keys: '[414996.1.127440922]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Tuesday'
        Taborder: 2
      ]
    }
    Component cbWednesday
    {
      #keys: '[414996.1.127440923]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Wednesday'
        Taborder: 3
      ]
    }
    Component cbThursday
    {
      #keys: '[414996.1.127440924]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Thursday'
        Taborder: 4
      ]
    }
    Component cbFriday
    {
      #keys: '[414996.1.127440925]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Friday'
        Taborder: 5
      ]
    }
    Component cbSaturday
    {
      #keys: '[414996.1.127440926]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Saturday'
        Taborder: 6
      ]
    }
    Component cbSunday
    {
      #keys: '[414996.1.127440927]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Sunday'
        Taborder: 7
      ]
    }
    #child: PanelWeekly996
    Component bApply
    {
      #keys: '[414996.1.127910499]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Apply'
        Taborder: 8
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
    Title: 'Weekly'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelWeekly996.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
Component PanelWeekly996
{
  #keys: '[414996.1.127820590]'
  BaseType: 'WebPanel'
  Children:
  [
    Component efWeekly id:efWeekly_637
    {
      #keys: '[414996.1.127820639]'
      BaseType: 'WebEditField'
      Properties:
      [
        Label: 'Recur every '
        Taborder: 0
        Text: '1'
      ]
    }
    Component LabelWeekly
    {
      #keys: '[414996.1.127820645]'
      BaseType: 'WebLabel'
      Properties:
      [
        Label: 'week(s)'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelDaily_478_bApply568_OnClick#952.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelDaily_478/bApply568_478
Response OnClick () id:Response_PanelDaily819_bApply568_OnClick_952
{
  #keys: '[414996.1.127821083]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      skipDay := [Number]efDaily.Text();
      LocalTool::BatchSetUnitShiftPattern( dhSelectUnit.Data(),ddlShiftPattern.Data(),dsStartDate.Date(),dsEndDate.Date() ,skipDay );
      WebMessageBox::Success( "Success");
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelWeekly_791_bApply_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def ÐÞ¸Ä
@@ -1,8 +1,8 @@
Quintiq file version 2.0
#parent: PanelRight/bApply
Response OnClick () id:Response_PanelRight_bApply_OnClick
#parent: PanelWeekly_791/bApply
Response OnClick () id:Response_PanelWeekly996_bApply_OnClick
{
  #keys: '[414996.1.117189721]'
  #keys: '[414996.1.127910498]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
@@ -32,7 +32,8 @@
      if( cbSunday.Checked() ){
        weekdays.Add( 7 ); 
      }
      LocalTool::BatchSetUnitShiftPattern( dhSelectUnit.Data(),ddlShiftPattern.Data(),dsStartDate.Date(),dsEndDate.Date(),weekdays );
      skipWeek := [Number]efWeekly.Text();
      LocalTool::BatchSetUnitShiftPattern( dhSelectUnit.Data(),ddlShiftPattern.Data(),dsStartDate.Date(),dsEndDate.Date(),weekdays ,skipWeek );
      WebMessageBox::Success( "Success");
    *]
  }
_Main/UI/MacroPlannerWebApp/Component_FormProductionPlan/Component_MatrixEditorPISPIP.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component MatrixEditorPISPIP #extension
{
  Children:
  [
    Component UserConfigurableInformationMatrixEditorPISPIP #extension
    {
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionPlan/Component_PanelMatrix.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
Component PanelMatrix #extension
{
  Children:
  [
    #child: MatrixEditorPISPIP
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormProductionPlan/_ROOT_Component_FormProductionPlan.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: LibMacroPlannerWebUI
OrphanComponent FormProductionPlan #extension
{
  Children:
  [
    #child: PanelMatrix
  ]
}
_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw
@@ -4,6 +4,88 @@
  {
    forms
    {
      form_legacy_2
      {
        title: 'Time Capacities'
        shown: true
        componentID: 'FormTimeCapacities'
        layout
        {
          mode: 'open'
          rowPosition: 13
          rowSpan: 10
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormTimeCapacities_PanelMatrix
          {
            sizeRatio: 1
          }
          FormTimeCapacities_MatrixEditorTimeCapacities
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 449
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QLibMacroPlannerWebUI::FormTimeCapacities.MatrixEditorTimeCapacities'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_ShiftPatternName
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'ShiftPatternName'
                    }
                    attribute_Efficiency
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 1
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'Efficiency'
                    }
                    attribute_TotalAvailableCapacity
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 2
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'TotalAvailableCapacity'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'StartDate'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'DisplayIndex'"
                  }
                }
              }
            }
          }
        }
      }
      form_FormProductionLineBatchSetShiftPattern
      {
        title: 'QMacroPlanner::FormProductionLineBatchSetShiftPattern'
@@ -13,9 +95,9 @@
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 23
          rowSpan: 12
          columnPosition: 1
          columnSpan: 9
          columnSpan: 10
        }
        components
        {
@@ -48,6 +130,27 @@
          {
            sizeRatio: 1
          }
          FormProductionLineBatchSetShiftPattern_PanelRight445
          {
            sizeRatio: 1
            activeChild: 'PanelWeekly'
          }
          FormProductionLineBatchSetShiftPattern_PanelDaily
          {
            sizeRatio: 1
          }
          FormProductionLineBatchSetShiftPattern_PanelDaily819
          {
            sizeRatio: 1
          }
          FormProductionLineBatchSetShiftPattern_PanelWeekly
          {
            sizeRatio: 1
          }
          FormProductionLineBatchSetShiftPattern_PanelWeekly996
          {
            sizeRatio: 1
          }
        }
      }
      form_FormKPI
_Main/UI/MacroPlannerWebApp/Views/Forecasts.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_legacy_1
      {
        components
        {
          FormForecasts_DataSetLevelSalesDemands
          {
            column_Differnce
            {
              columnId: 'Differnce'
              dataPath: 'Differnce'
              dataType: 'real'
              index: 15
              subtotals: ''
              width: 150
            }
            column_Origin
            {
              columnId: 'Origin'
              dataPath: 'Origin'
              dataType: 'string'
              index: 14
              subtotals: ''
              width: 150
            }
            sort: 'DESC:Origin'
          }
        }
      }
    }
  }
  formatversion: 2
  id: 'Forecasts'
  name: 'Forecasts'
  isglobal: false
  isroot: false
}
_Main/UI/MacroPlannerWebApp/Views/NewOfflinePlan.vw
@@ -30,7 +30,7 @@
          FormNewOfflinePlan_MatrixEditor515
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 511
            totalHeaderWidth: 507
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
@@ -50,7 +50,7 @@
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: 'sum'
                      columnsubtotal: ''
                      attribute: 'Quantity'
                    }
                    attribute_Order
@@ -87,7 +87,7 @@
          FormNewOfflinePlan_MatrixEditor583
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 510
            totalHeaderWidth: 509
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
@@ -155,48 +155,6 @@
          }
        }
      }
      form_FormGeneralSettings
      {
        title: 'General Settings'
        shown: true
        componentID: 'FormGeneralSettings'
        layout
        {
          mode: 'dockright'
          index: 0
        }
        components
        {
          FormGeneralSettings_PanelContent
          {
            sizeRatio: 1
          }
          FormGeneralSettings_PanelGeneralParameter
          {
            sizeRatio: 1
          }
          FormGeneralSettings_PanelLeadTimeDependent
          {
            sizeRatio: 1
          }
          FormGeneralSettings_PanelShelfLife
          {
            sizeRatio: 1
          }
          FormGeneralSettings_PanelSustainability
          {
            sizeRatio: 1
          }
          FormGeneralSettings_PanelForecastNetting
          {
            sizeRatio: 1
          }
          FormGeneralSettings_PanelActions
          {
            sizeRatio: 1
          }
        }
      }
    }
    userconfigurableinformation
    {
@@ -204,7 +162,7 @@
    page: ''
    group: ''
    index: 0
    image: 'CHART_DONUT'
    image: 'BEAR'
    description: ''
  }
  formatversion: 2
_Main/UI/MacroPlannerWebApp/Views/Time_Capacities.vw
@@ -101,7 +101,7 @@
          FormProductionLineBatchData_DataSetLevelProductionLineBatchData
          {
            groupDepth: -1
            sort: 'StartDate'
            sort: 'DESC:Unit3.Name'
            column_ImageIsEnable
            {
              columnId: 'ImageIsEnable'
@@ -147,12 +147,21 @@
              subtotals: ''
              width: 150
            }
            column_Unit3_Name
            {
              columnId: 'Unit3.Name'
              dataPath: 'Unit3.Name'
              dataType: 'string'
              index: 5
              subtotals: ''
              width: 150
            }
            column_ShiftPattern1_Name
            {
              columnId: 'ShiftPattern1.Name'
              dataPath: 'ShiftPattern1.Name'
              dataType: 'string'
              index: 5
              index: 6
              subtotals: ''
              width: 112
            }
@@ -161,10 +170,19 @@
              columnId: 'ShiftPattern2.Name'
              dataPath: 'ShiftPattern2.Name'
              dataType: 'string'
              index: 6
              index: 7
              subtotals: ''
              width: 112
            }
            column_ShiftPattern3_Name
            {
              columnId: 'ShiftPattern3.Name'
              dataPath: 'ShiftPattern3.Name'
              dataType: 'string'
              index: 8
              subtotals: ''
              width: 150
            }
          }
        }
      }
_Main/UI/MacroPlannerWebApp/Views/TransferPlan.vw
@@ -17,7 +17,62 @@
          columnPosition: 1
          columnSpan: 12
        }
        components: null
        components
        {
          FormTransferPlan_pHeader
          {
            sizeRatio: 1
          }
          FormTransferPlan_pContent
          {
            sizeRatio: 1
          }
          FormTransferPlan_MatrixEditor872
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 200
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 144
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QMacroPlanner::FormTransferPlan.MatrixEditor872'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_Value
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'Value'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'ColumnDate'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'SourceStockpoingPointID';datamember:'TargetStockpoingPointID';datamember:'ProductID'"
                  }
                }
              }
            }
          }
        }
      }
      form_FormOptimizerPuzzles
      {