Add Release & Copy(Save) button
在场景编辑中添加发布/复制(保存)按钮,并实现对应后台逻辑,修复了之前未测试出的部分问题
已修改15个文件
已添加13个文件
已删除1个文件
| | |
| | | { |
| | | DefaultText: 'Revert' |
| | | } |
| | | InfoMessage Scenario_General_IsReleased |
| | | { |
| | | DefaultText: 'Not allowed on a released scenario' |
| | | } |
| | | InfoMessage Strategy_CampaignOptimizer_DisableTooltip |
| | | { |
| | | DefaultText: 'When disabled, the optimizer is only allowed to replan the quantities of the campaigns based on the constraints of the campaigns created manually.' |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute IsReleased |
| | | { |
| | | #keys: '3[412960.0.172790038][412960.0.172790037][412960.0.172790039]' |
| | | Description: 'è¯¥çæ¬æ¯å¦å·²åå¸' |
| | | ValueType: Boolean |
| | | InterfaceProperties { Accessibility: 'Module' } |
| | | } |
| | |
| | | { |
| | | feedback_o := Translations::Scenario_General_IsDeleted(); |
| | | } |
| | | else if( this.IsReleased() ){ |
| | | feedback_o := Translations::Scenario_General_IsReleased(); |
| | | } |
| | | |
| | | return feedback_o = ''; |
| | | *] |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method SetReleased |
| | | { |
| | | Description: '设置æåºæ¯çåå¸ç¶æ' |
| | | IsAbstract: true |
| | | TextBody: |
| | | [* |
| | | // Administrator Sep-15-2023 (created) |
| | | this.IsReleased( true ); |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | MethodOverride SetReleased |
| | | { |
| | | TextBody: 'this.IsReleased( true );' |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | InfoMessages id:#InfoMessages #extension |
| | | { |
| | | } |
| | |
| | | listtodeal := selectset( macroplan, |
| | | Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, |
| | | pispip, |
| | | true ); |
| | | pispip.SalesDemandQuantity() > 0 ); |
| | | |
| | | if( latestversion.CalType() = "TM_SOP_R1" ){ |
| | | listtodeal := selectset( macroplan, |
| | |
| | | [* |
| | | // Administrator Sep-14-2023 (created) |
| | | businesstype := GlobalOTDTable::GetBusinessTypeName( businessname ); |
| | | |
| | | releasetime := DateTime::ActualTime(); |
| | | // Clean exist data |
| | | traverse( owner, MappingVersionControl, mpc, true ){ |
| | | mpc.Delete(); |
| | |
| | | if( isnull( existversion ) ){ |
| | | longversionname := item.VersionName(); |
| | | longversionnamelist := longversionname.Tokenize( "-" ); |
| | | shortversionname := longversionnamelist.Element( longversionnamelist.Size() ); |
| | | shortversionname := longversionnamelist.Element( longversionnamelist.Size() - 1 ); |
| | | caltype := shortversionname.SubString( 0, 10 ); |
| | | shortversionid := versionid.ReplaceAll( "-" + caltype, "" ); |
| | | newversioncontrol := VersionControl::Create( owner, |
| | |
| | | shortversionname, |
| | | item.User() ); |
| | | newversioncontrol.IsReleased( true ); |
| | | newversioncontrol.ReleaseTime( releasetime ); |
| | | } |
| | | } |
| | | *] |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method SetReleased #extension |
| | | { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | StaticMethod CopyVersion ( |
| | | GlobalOTDTable owner, |
| | | String businessname |
| | | ) as VersionControl |
| | | { |
| | | Description: 'å¤å¶å½åçæ¬å¹¶æ´æ°çæ¬å·' |
| | | TextBody: |
| | | [* |
| | | // Administrator Sep-13-2023 (created) |
| | | createtime := DateTime::ActualTime(); |
| | | user := QuintiqUser::CurrentUser().Username(); |
| | | starttime := DateTime::Construct(1970,1,1,0,0,0); |
| | | // Get the local scenario businesstype |
| | | businesstype := GlobalOTDTable::GetBusinessTypeName( businessname ); |
| | | |
| | | // Get the older version info |
| | | oldversionid := ""; |
| | | oldversionname := ""; |
| | | |
| | | latestversion := VersionControl::FindLatestUpdateVersion( owner, businesstype ); |
| | | copyversionid := latestversion.VersionID(); |
| | | |
| | | if( copyversionid.FindString( "-", 0 ) > 0 ){ |
| | | latestversionlist := copyversionid.Tokenize( "-" ); |
| | | latestversionnamelist := latestversion.LongVersionName().Tokenize( "-" ); |
| | | for( i := 0; i < latestversionlist.Size(); i := i + 1 ){ |
| | | oldversionid := oldversionid + "-" + latestversionlist.Element( i ); |
| | | oldversionname := oldversionname + "-" + latestversionnamelist.Element( i ); |
| | | } |
| | | oldversionid := oldversionid + "-"; |
| | | oldversionname := oldversionname + "-"; |
| | | } |
| | | |
| | | // Calculate new version info |
| | | additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 ); |
| | | newversionid := oldversionid + [String]additionversionid; |
| | | newcaltype := latestversion.CalType(); |
| | | newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")"; |
| | | newversionname := oldversionname + newsingleversionname; |
| | | |
| | | // Create new version |
| | | newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user ); |
| | | |
| | | return newversion; |
| | | *] |
| | | } |
| | |
| | | additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 ); |
| | | newversionid := oldversion_id + [String]additionversionid; |
| | | newcaltype := GlobalOTDTable::GetNextCalType( oldcaltype, businesstype ); |
| | | newsingleversionname := newcaltype + "(" + createtime.Format( "Y-M2-D2 H:m:s" ) + ")"; |
| | | newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")"; |
| | | newversionname := oldversion_name + newsingleversionname; |
| | | |
| | | // Create new version |
| | | newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user ); |
| | | newversion.IsReleased( true ); |
| | | newversion.ReleaseTime( createtime ); |
| | | |
| | | return newversion; |
| | | *] |
| | |
| | | additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 ); |
| | | newversionid := oldversion_id + [String]additionversionid; |
| | | newcaltype := GlobalOTDTable::GetNextCalType( oldcaltype, businesstype ); |
| | | newsingleversionname := newcaltype + "(" + createtime.Format( "Y-M2-D2 H:m:s" ) + ")"; |
| | | newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")"; |
| | | newversionname := oldversion_name + newsingleversionname; |
| | | |
| | | // Create new version |
| | |
| | | latestversion := maxselect( globalotdtable, |
| | | VersionControl, |
| | | version, |
| | | version.BusinessType()=businesstype, |
| | | // and version.IsReleased()=true, |
| | | version.BusinessType()=businesstype and version.IsReleased()=true, |
| | | version.CreateTime() ); |
| | | |
| | | return latestversion; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | StaticMethod FindLatestVersion ( |
| | | GlobalOTDTable globalotdtable, |
| | | String businesstype |
| | | ) as VersionControl |
| | | { |
| | | Description: 'è·åæäºä¸é¨ç®åææ°ççæ¬å·' |
| | | TextBody: |
| | | [* |
| | | // Administrator Sep-13-2023 (created) |
| | | |
| | | // Get the latest version data |
| | | latestversion := maxselect( globalotdtable, |
| | | VersionControl, |
| | | version, |
| | | version.BusinessType()=businesstype, |
| | | version.CreateTime() ); |
| | | |
| | | return latestversion; |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | StaticMethod GetVersionInfo ( |
| | | GlobalOTDTable owner, |
| | | String businessname |
| | | ) as owning Strings |
| | | { |
| | | Description: 'è·åå¤§çæ¬çæ¬å·åçæ¬åç§°' |
| | | TextBody: |
| | | [* |
| | | // Administrator Sep-13-2023 (created) |
| | | businesstyoe := GlobalOTDTable::GetBusinessTypeName( businessname ); |
| | | result := construct( Strings ); |
| | | rootversion := VersionControl::FindLatestVersion( owner, businesstyoe ); |
| | | |
| | | if( not isnull( rootversion ) ){ |
| | | result.Add( rootversion.VersionID() ); |
| | | result.Add( rootversion.LongVersionName() ); |
| | | result.Add( rootversion.VersionID() + "-" + rootversion.CalType() ); |
| | | result.Add( rootversion.SingleVersionName() ); |
| | | }else{ |
| | | result.Add( "" ); |
| | | result.Add( "" ); |
| | | result.Add( "" ); |
| | | result.Add( "" ); |
| | | } |
| | | |
| | | return &result; |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | Component pnlActions #extension |
| | | { |
| | | Children: |
| | | [ |
| | | Component btnOK #extension |
| | | { |
| | | } |
| | | ] |
| | | } |
| | |
| | | newscenario := null( Scenario ); |
| | | strategy := null( Strategy ); |
| | | |
| | | // New version |
| | | globalotdtable := GlobalOTDTable; |
| | | testbusinesstype := "éå¢"; |
| | | if( data.IsCreateNewVersion() ){ |
| | | VersionControl::CreateNewSceneVersion( globalotdtable, testbusinesstype ); |
| | | }else{ |
| | | VersionControl::CreateNewVersion( globalotdtable, testbusinesstype ); |
| | | } |
| | | versionname := VersionControl::GetVersionInfo( globalotdtable, testbusinesstype ).Element( 3 ); |
| | | |
| | | // Get Version Name |
| | | if( data.Name() = "" ){ |
| | | data.Name( versionname ); |
| | | } |
| | | |
| | | // Copy scenario |
| | | if( isnull( data.WrappedInstance() ) ) |
| | | { |
| | |
| | | if( data.EnableSync() ) { |
| | | MacroPlan::DoSync( macroPlanNew, |
| | | data.BusinessType(), data.IsKeyProduct(), data.CreatePurchaseSupplyMaterial() ); |
| | | } |
| | | |
| | | // New version |
| | | globalotdtable := GlobalOTDTable; |
| | | testbusinesstype := "éå¢"; |
| | | if( data.IsCreateNewVersion() ){ |
| | | VersionControl::CreateNewSceneVersion( globalotdtable, testbusinesstype ); |
| | | }else{ |
| | | VersionControl::CreateNewVersion( globalotdtable, testbusinesstype ); |
| | | } |
| | | |
| | | this.Close(); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: pnlActions/btnOK |
| | | Response OnClick () id:Response_pnlActions_btnOK_OnClick #extension |
| | | { |
| | | Precondition: |
| | | [* |
| | | data := DataHolderDialogData.Data(); |
| | | return not isnull( data ) |
| | | and Scenario::ValidateInput( feedback, |
| | | ScenarioManager, |
| | | // edtName.Text(), |
| | | "for version", |
| | | data.WrappedInstance(), |
| | | '', |
| | | GlobalParameters_MP::GetKB_New(), |
| | | 'Test', |
| | | RadioButtonGroupStorageState.BoundValue(), |
| | | Domain.MDSStorageDefinitionManager().Enabled(), |
| | | Domain.MDSStorageDefinitionManager().DatasetStoreEnabled(), |
| | | Domain.MDSStorageDefinitionManager().DatabaseEnabled() ); |
| | | *] |
| | | } |
| | |
| | | Children: |
| | | [ |
| | | #child: pnlContent |
| | | #child: pnlActions |
| | | ] |
| | | } |
| | |
| | | Quintiq file version 2.0 |
| | | Component ListScenario #extension |
| | | { |
| | | Children: |
| | | [ |
| | | Component DataSetLevelScenario #extension |
| | | { |
| | | Children: |
| | | [ |
| | | Component listContextMenuScenarioFolder #extension |
| | | { |
| | | Children: |
| | | [ |
| | | Component MenuRelaeaseNewVersion |
| | | { |
| | | #keys: '[412960.0.168283194]' |
| | | BaseType: 'WebMenu' |
| | | Properties: |
| | | [ |
| | | DelegationID: 'ActionBarScenario_Release' |
| | | Description: 'å叿°çæ¬' |
| | | Image: 'EDITOR_ALGORITHM' |
| | | Taborder: 10 |
| | | Title: 'Release New Version...' |
| | | ] |
| | | } |
| | | Component MenuCopyScenario #extension |
| | | { |
| | | } |
| | | Component MenuSaveNewVersion |
| | | { |
| | | #keys: '[412960.0.172960163]' |
| | | BaseType: 'WebMenu' |
| | | Properties: |
| | | [ |
| | | DelegationID: 'ActionBarScenario_Save' |
| | | Description: 'å叿°çæ¬' |
| | | Image: 'DATA_DISK' |
| | | Taborder: 11 |
| | | Title: 'Save New Version...' |
| | | ] |
| | | } |
| | | Component MenuSeparator2 #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 12 |
| | | ] |
| | | } |
| | | Component MenuSeparator3 #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 14 |
| | | ] |
| | | } |
| | | Component MenuSelectScenario #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 13 |
| | | ] |
| | | } |
| | | Component MenuEditAuthorization #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 15 |
| | | ] |
| | | } |
| | | Component MenuSeparator4 #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 16 |
| | | ] |
| | | } |
| | | Component MenuLoadScenario #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 17 |
| | | ] |
| | | } |
| | | Component MenuUnloadScenario #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 18 |
| | | ] |
| | | } |
| | | Component MenuSeparator5 #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 19 |
| | | ] |
| | | } |
| | | Component MenuAdministration #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 20 |
| | | ] |
| | | } |
| | | Component MenuRestoreItem #extension |
| | | { |
| | | Properties: |
| | | [ |
| | | Taborder: 21 |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: ListScenario |
| | | Response OnClick ( |
| | | ScenarioMP selection |
| | | ) id:Response_ListScenario_MenuCopyScenario_OnClick #extension |
| | | { |
| | | Precondition: |
| | | [* |
| | | feedback := ApplicationMacroPlanner.HasValidDataset( selection ); |
| | | return feedback = '' and selection.CanCopy( feedback ); |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: ListScenario |
| | | Response OnClick ( |
| | | ScenarioMP selection |
| | | ) id:Response_ListScenario_MenuRelaeaseNewVersion_OnClick |
| | | { |
| | | #keys: '[412960.0.170112594]' |
| | | CanBindMultiple: false |
| | | DefinitionID => /ListScenario/Responsedef_ListScenario_WebMenu_OnClick |
| | | Initiator: 'MenuRelaeaseNewVersion' |
| | | Precondition: |
| | | [* |
| | | feedback := ApplicationMacroPlanner.HasValidDataset( selection ); |
| | | return feedback = '' and selection.CanCopy( feedback ); |
| | | *] |
| | | QuillAction |
| | | { |
| | | Body: |
| | | [* |
| | | // Copy scenario |
| | | owner := GlobalOTDTable; |
| | | macroplan := MacroPlan; |
| | | testbusinesstype := "éå¢"; |
| | | |
| | | VersionControl::ReleaseNewVersion( owner, testbusinesstype ); |
| | | GlobalOTDTable::GetOutputVersionData( owner, macroplan, testbusinesstype ); |
| | | selection.SetReleased(); |
| | | |
| | | versionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 3 ); |
| | | // Get the active scenario |
| | | //data := selection; |
| | | newscenario := null( Scenario ); |
| | | strategy := null( Strategy ); |
| | | |
| | | data := ScenarioManager.ScenarioNode( relshadow, |
| | | ScenarioMP, |
| | | Parent := selection, |
| | | Name := versionname, |
| | | SelectedStrategy := selection.SelectedStrategy(), |
| | | State := selection.State() ); |
| | | |
| | | scenario := data.Parent().astype( ScenarioMP ); |
| | | strategy := data.SelectedStrategy(); |
| | | |
| | | newscenario:= scenario.Copy( data.Parent(), versionname, "", |
| | | data.Comment(), data.State() ); |
| | | |
| | | newscenario.SelectedStrategy( relset, strategy ); |
| | | *] |
| | | GroupServerCalls: false |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: ListScenario |
| | | Response OnClick ( |
| | | ScenarioMP selection |
| | | ) id:Response_ListScenario_MenuSaveNewVersion_OnClick |
| | | { |
| | | #keys: '[412960.0.171680443]' |
| | | CanBindMultiple: false |
| | | DefinitionID => /ListScenario/Responsedef_ListScenario_WebMenu_OnClick |
| | | Initiator: 'MenuSaveNewVersion' |
| | | Precondition: |
| | | [* |
| | | feedback := ApplicationMacroPlanner.HasValidDataset( selection ); |
| | | return feedback = '' and selection.CanCopy( feedback ); |
| | | *] |
| | | QuillAction |
| | | { |
| | | Body: |
| | | [* |
| | | // Copy scenario |
| | | owner := GlobalOTDTable; |
| | | macroplan := MacroPlan; |
| | | testbusinesstype := "éå¢"; |
| | | |
| | | VersionControl::CopyVersion( owner, testbusinesstype ); |
| | | |
| | | versionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 3 ); |
| | | // Copy scenario |
| | | newscenario := null( Scenario ); |
| | | strategy := null( Strategy ); |
| | | |
| | | data := ScenarioManager.ScenarioNode( relshadow, |
| | | ScenarioMP, |
| | | Parent := selection, |
| | | Name := versionname, |
| | | SelectedStrategy := selection.SelectedStrategy(), |
| | | State := selection.State() ); |
| | | |
| | | scenario := data.Parent().astype( ScenarioMP ); |
| | | strategy := data.SelectedStrategy(); |
| | | |
| | | newscenario:= scenario.Copy( data.Parent(), versionname, "", |
| | | data.Comment(), data.State() ); |
| | | |
| | | newscenario.SelectedStrategy( relset, strategy ); |
| | | *] |
| | | GroupServerCalls: false |
| | | } |
| | | } |
| | |
| | | Description: 'åå¸ä¸ä¸ªæ°çæ¬' |
| | | Label: 'æµè¯ç¨çæ¬åå¸' |
| | | Taborder: 4 |
| | | Visible: false |
| | | ] |
| | | } |
| | | ] |
| | |
| | | Body: |
| | | [* |
| | | owner := GlobalOTDTable; |
| | | rootversionid := VersionControl::GetSOPVersionInfo( owner ).Element( 2 ); |
| | | testbusinesstype := "éå¢"; |
| | | rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 2 ); |
| | | dlg := construct( DialogVersionIDCopy ); |
| | | dlg.lblContent().Text( rootversionid ); |
| | | dlg.JustShow(); |
| | |
| | | owner := GlobalOTDTable; |
| | | testbusinesstype := "éå¢"; |
| | | GlobalOTDTable::GetVersionData( owner, testbusinesstype ); |
| | | rootversionid := VersionControl::GetSOPVersionInfo( owner ).Element( 0 ); |
| | | rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 0 ); |
| | | DataExtractorVersionOfSOPDetails.FixedFilter( "object.VersionID().FindString( " + rootversionid.AsQUILL() + ", 0 ) = 0" ); |
| | | rootversionname := VersionControl::GetSOPVersionInfo( owner ).Element( 1 ); |
| | | rootversionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 1 ); |
| | | LabelVersionOfSOPHeader.Text( rootversionname ); |
| | | VersionStatus::GetBusinessTypeStatus( owner, rootversionid ); |
| | | *] |
| | |
| | | Taborder: 4 |
| | | ] |
| | | } |
| | | Component DataHolderVersionOfSOPCopy |
| | | { |
| | | #keys: '[412960.0.166861218]' |
| | | BaseType: 'WebDataHolder' |
| | | Databinding: 'shadow[ScenarioMP]*' |
| | | Properties: |
| | | [ |
| | | Taborder: 5 |
| | | ] |
| | | } |
| | | ] |
| | | Properties: |
| | | [ |
| | |
| | | ProjectProperties |
| | | { |
| | | ApplicationComponentName: 'ApplicationMacroPlanner' |
| | | BuildVersion: '2022.3.0.72' |
| | | BuildVersion: '2022.3.0.171' |
| | | Description: 'Quintiq Macro Planner' |
| | | ProjectKind: 'WebClient' |
| | | } |