From 5655862ec81022848c46d1862404f077b919f9fa Mon Sep 17 00:00:00 2001 From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com> Date: 星期四, 12 九月 2024 12:55:32 +0800 Subject: [PATCH] 添加新增Forecast的时候可以使用Curve拆分的功能 --- _Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick#715.def | 17 ++++ _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelGeneral.def | 1 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_pnlActions.def | 32 ++++++++ _Main/BL/Type_Archive/StaticMethod_Success.qbl | 2 _Main/BL/Type_Forecast/StaticMethod_SplitUsingCurve.qbl | 62 +++++++++++++++ _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_PanelCurve_DropDownStringListCurve_OnCreated.def | 17 ++++ _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/_ROOT_Component_DialogCreateEditForecast.def | 1 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelCurve.def | 24 ++++++ _Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def | 4 + _Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_listContextMenuSD.def | 4 + _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelOrigin.def | 1 _Main/BL/Type_Archive/StaticMethod_GenerateForecast.qbl | 9 + _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_pnlActions_bSplitUsingCurve_OnClick.def | 27 ++++++ 13 files changed, 197 insertions(+), 4 deletions(-) diff --git a/_Main/BL/Type_Archive/StaticMethod_GenerateForecast.qbl b/_Main/BL/Type_Archive/StaticMethod_GenerateForecast.qbl index c2e0f8d..fc1beab 100644 --- a/_Main/BL/Type_Archive/StaticMethod_GenerateForecast.qbl +++ b/_Main/BL/Type_Archive/StaticMethod_GenerateForecast.qbl @@ -2,13 +2,16 @@ #parent: #root StaticMethod GenerateForecast ( ArchiveExecutionStatus archiveExecutionStatus, - MacroPlan macroPlan + MacroPlan macroPlan, + Boolean isClearForecast ) { TextBody: [* - traverse ( macroPlan, SalesDemand.astype( Forecast ), f ) { - f.Delete(); + if( isClearForecast ){ + traverse ( macroPlan, SalesDemand.astype( Forecast ), f ) { + f.Delete(); + } } productMPs := selectset( macroPlan,Product_MP,prod,not prod.IsSystem() ); diff --git a/_Main/BL/Type_Archive/StaticMethod_Success.qbl b/_Main/BL/Type_Archive/StaticMethod_Success.qbl index 56e0029..ccabea9 100644 --- a/_Main/BL/Type_Archive/StaticMethod_Success.qbl +++ b/_Main/BL/Type_Archive/StaticMethod_Success.qbl @@ -17,7 +17,7 @@ archiveExecutionStatus.AES_TemporaryDemandData().Execute(); // 鐢熸垚Forecast - Archive::GenerateForecast( archiveExecutionStatus, macroPlan ); + Archive::GenerateForecast( archiveExecutionStatus, macroPlan ,true ); // 娓呯┖涓存椂鏁版嵁搴� archiveExecutionStatus.AES_TemporaryDemandData().Source().FlatQuery( "truncate table A_Forecasts" ); diff --git a/_Main/BL/Type_Forecast/StaticMethod_SplitUsingCurve.qbl b/_Main/BL/Type_Forecast/StaticMethod_SplitUsingCurve.qbl new file mode 100644 index 0000000..e5130b9 --- /dev/null +++ b/_Main/BL/Type_Forecast/StaticMethod_SplitUsingCurve.qbl @@ -0,0 +1,62 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod SplitUsingCurve ( + SalesSegment_MP salesSegment, + Product_MP product, + StockingPoint_MP stockingPoint, + Date startDate, + Date endDate, + Real quantity, + String curve, + const Archive archive, + ArchiveExecutionStatus archiveExecutionStatus +) +{ + TextBody: + [* + // Akari Sep-11-2024 (created) + // 璇锋眰鍙傛暟 + macroPlan := salesSegment.MacroPlan(); + ac := select( archive, ArchiveCurve, tempAC, true ); + json := JSON::Object() + .Add( "salesSegment", salesSegment.Name() ) + .Add( "productID", product.ID() ) + .Add( "stockingPointID", stockingPoint.ID() ) + .Add( "startDate", startDate.Format( "Y-M2-D2") ) + .Add( "endDate", endDate.Format( "Y-M2-D2") ) + .Add( "quantity", quantity ) + .Add( "curve", curve ) + .Add( "pathCurve", ac.FilePath() ).Build().AsString(); + + // 璋冪敤鎺ュ彛 + url := "/IDSPPACurve/ImportCurveIncremental"; + + i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() ); + i.URL( url ); + i.PostMethod( true ); + i.MediaType( "application/json" ); + i.TimeOut( Duration::Minutes( 5 ) ); + + i.Call( json ); + + htmlresult := i.Result(); + + respJSON := JSON::Parse( htmlresult ); + + code := respJSON.Get( "code" ).GetNumber(); + message := respJSON.Get( "message" ).GetString(); + + if( code = 200 ){ + // 鑾峰彇闇�姹� + archiveExecutionStatus.AES_TemporaryDemandData().Execute(); + + // 鐢熸垚Forecast + Archive::GenerateForecast( archiveExecutionStatus, macroPlan ,false ); + + // 娓呯┖涓存椂鏁版嵁搴� + archiveExecutionStatus.AES_TemporaryDemandData().Source().FlatQuery( "truncate table A_Forecasts" ); + }else{ + error( message ); + } + *] +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelCurve.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelCurve.def new file mode 100644 index 0000000..48a8a79 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelCurve.def @@ -0,0 +1,24 @@ +Quintiq file version 2.0 +Component PanelCurve +{ + #keys: '[414996.1.77261280]' + BaseType: 'WebPanel' + Children: + [ + Component DropDownStringListCurve + { + #keys: '[414996.1.79651031]' + BaseType: 'WebDropDownStringList' + Properties: + [ + Label: 'Curve' + Taborder: 0 + ] + } + ] + Properties: + [ + Taborder: 9 + Visible: false + ] +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelGeneral.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelGeneral.def index 675e436..df8b96b 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelGeneral.def +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelGeneral.def @@ -4,5 +4,6 @@ Children: [ #child: PanelOrigin + #child: PanelCurve ] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelOrigin.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelOrigin.def index 796aea5..36444d4 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelOrigin.def +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_PanelOrigin.def @@ -21,6 +21,7 @@ ] Properties: [ + FixedSize: true Taborder: 8 ] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_pnlActions.def new file mode 100644 index 0000000..140aa8e --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Component_pnlActions.def @@ -0,0 +1,32 @@ +Quintiq file version 2.0 +Component pnlActions #extension +{ + Children: + [ + Component btnOk #extension + { + Properties: + [ + Taborder: 1 + ] + } + Component btnCancel #extension + { + Properties: + [ + Taborder: 2 + ] + } + Component bSplitUsingCurve + { + #keys: '[414996.1.79889444]' + BaseType: 'WebButton' + Properties: + [ + Label: 'Split using Curve' + Taborder: 0 + Visible: false + ] + } + ] +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_PanelCurve_DropDownStringListCurve_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_PanelCurve_DropDownStringListCurve_OnCreated.def new file mode 100644 index 0000000..d790417 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_PanelCurve_DropDownStringListCurve_OnCreated.def @@ -0,0 +1,17 @@ +Quintiq file version 2.0 +#parent: PanelCurve/DropDownStringListCurve +Response OnCreated () id:Response_MacroPlanner_PanelCurve_DropDownStringListCurve_OnCreated +{ + #keys: '[414996.1.77271766]' + CanBindMultiple: false + DefinitionID: 'Responsedef_WebComponent_OnCreated' + GroupServerCalls: true + QuillAction + { + Body: + [* + curves := selectuniquevalues( MacroPlan,SixDigitCode,code,code.Curve()); + this.Strings( curves.Concatenate( ";")); + *] + } +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_pnlActions_bSplitUsingCurve_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_pnlActions_bSplitUsingCurve_OnClick.def new file mode 100644 index 0000000..1995cc8 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/Response_MacroPlanner_pnlActions_bSplitUsingCurve_OnClick.def @@ -0,0 +1,27 @@ +Quintiq file version 2.0 +#parent: pnlActions/bSplitUsingCurve +Response OnClick () id:Response_MacroPlanner_pnlActions_bSplitUsingCurve_OnClick +{ + #keys: '[414996.1.77291489]' + CanBindMultiple: false + DefinitionID: 'Responsedef_WebButton_OnClick' + GroupServerCalls: true + QuillAction + { + Body: + [* + Forecast::SplitUsingCurve( DropDownListSalesSegment.Data(), + DropDownListProduct.Data(), + DropDownListStockingPoint.Data(), + DateSelectorStart.Date(), + DateSelectorEnd.Date(), + [Real]EditFieldQuantityUom.Text(), + DropDownStringListCurve.Text(), + Archive, + ArchiveExecutionStatus ); + + WebMessageBox::Success( "Success" ); + Form.Close(); + *] + } +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/_ROOT_Component_DialogCreateEditForecast.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/_ROOT_Component_DialogCreateEditForecast.def index dbf76ef..cda7f23 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/_ROOT_Component_DialogCreateEditForecast.def +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditForecast/_ROOT_Component_DialogCreateEditForecast.def @@ -6,5 +6,6 @@ Children: [ #child: pnlContent + #child: pnlActions ] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def index 8fc3953..b2c78ed 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def @@ -5,6 +5,10 @@ [ Component DataSetLevelSalesDemands #extension { + Children: + [ + #child: listContextMenuSD + ] Properties: [ Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgNotLinkedToPeriod","title":"ImgNotLinkedToPeriod","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgNotLinkedToPeriod"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsPostponed","title":"ImgIsPostponed","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsPostponed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPoint_MP.ID","title":"Stocking point","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"StockingPoint_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegment_MP.Name","title":"Sales segment","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SalesSegment_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product_MP.ID","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Product_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"Start","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure_MP.Name","title":"Quantity UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"UnitOfMeasure_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Original Qty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NettedQuantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"NettedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfilledQuantity","title":"Fulfilled","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"FulfilledQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeChart","columnid":"Fulfillment Illustration","title":"Fulfillment","subtotals":"","tooltip":"","width":-1,"display":"shown","type":"stackbar","relative":true,"attributes":[{"name":"Fulfilled demand","color":"rgb(87,184,71)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Fulfillment","title":"Fulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.FulfilledQuantity().Round(2)"}},{"name":"Unfulfilled demand","color":"rgb(232,123,0)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Unfulfilled demand","title":"Unfulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"maxvalue(object.NettedQuantity()-object.FulfilledQuantity(),0.0).Round(2)"}}]}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriceUoM","title":"PriceUoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PriceUoM"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Priority.Name","title":"Priority","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Priority.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandUncertaintyPercentage","title":"Uncertainty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandUncertaintyPercentage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Origin","title":"Origin","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Origin"}}]' diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_listContextMenuSD.def b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_listContextMenuSD.def new file mode 100644 index 0000000..c7f3361 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_listContextMenuSD.def @@ -0,0 +1,4 @@ +Quintiq file version 2.0 +Component listContextMenuSD #extension +{ +} diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick\043715.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick\043715.def" new file mode 100644 index 0000000..7041dcb --- /dev/null +++ "b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick\043715.def" @@ -0,0 +1,17 @@ +Quintiq file version 2.0 +#parent: ListSalesDemands +Response OnClick () inherited id:Response_ListSalesDemands_MenuCreate_OnClick_715 #extension +{ + QuillAction #extension + { + Body: + [* + //Create new sales demand + dlg := construct( DialogCreateEditForecast ); + dlg.New(); + + dlg.bSplitUsingCurve().Visible( true ); + dlg.PanelCurve().Visible( true ); + *] + } +} -- Gitblit v1.9.3