diff --git a/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotInstall.Codeunit.al b/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotInstall.Codeunit.al index c082059a2a..4d42c039d6 100644 --- a/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotInstall.Codeunit.al +++ b/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotInstall.Codeunit.al @@ -18,5 +18,6 @@ codeunit 290 "No. Series Copilot Install" NoSeriesCopilotRegister: Codeunit "No. Series Copilot Register"; begin NoSeriesCopilotRegister.RegisterCapability(); + NoSeriesCopilotRegister.ModifyCapability(); end; } \ No newline at end of file diff --git a/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotRegister.Codeunit.al b/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotRegister.Codeunit.al index cbab6bd7b7..73d9f11a2b 100644 --- a/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotRegister.Codeunit.al +++ b/src/Business Foundation/App/NoSeriesCopilot/src/Register/NoSeriesCopilotRegister.Codeunit.al @@ -40,6 +40,25 @@ codeunit 327 "No. Series Copilot Register" UpgradeTag.SetUpgradeTag(NoSeriesCopilotUpgradeTags.GetImplementationUpgradeTag()); end; + procedure ModifyCapability() + var + CopilotCapability: Codeunit "Copilot Capability"; + EnvironmentInformation: Codeunit "Environment Information"; + UpgradeTag: Codeunit "Upgrade Tag"; + NoSeriesCopilotUpgradeTags: Codeunit "No. Series Copilot Upgr. Tags"; + begin + if not EnvironmentInformation.IsSaaSInfrastructure() then + exit; + + if not CopilotCapability.IsCapabilityRegistered(Enum::"Copilot Capability"::"No. Series Copilot") then + exit; + + if not UpgradeTag.HasUpgradeTag(NoSeriesCopilotUpgradeTags.GetModifyCapabilityUpgradeTag()) then begin + CopilotCapability.ModifyCapability(Enum::"Copilot Capability"::"No. Series Copilot", Enum::"Copilot Availability"::Preview, Enum::"Copilot Billing Type"::"Not Billed", LearnMoreUrlTxt); + UpgradeTag.SetUpgradeTag(NoSeriesCopilotUpgradeTags.GetModifyCapabilityUpgradeTag()); + end; + end; + var LearnMoreUrlTxt: Label 'https://go.microsoft.com/fwlink/?linkid=2294514', Locked = true; diff --git a/src/Business Foundation/App/NoSeriesCopilot/src/Upgrade/NoSeriesCopilotUpgrTags.Codeunit.al b/src/Business Foundation/App/NoSeriesCopilot/src/Upgrade/NoSeriesCopilotUpgrTags.Codeunit.al index a9c8a5e261..a4d39a9b43 100644 --- a/src/Business Foundation/App/NoSeriesCopilot/src/Upgrade/NoSeriesCopilotUpgrTags.Codeunit.al +++ b/src/Business Foundation/App/NoSeriesCopilot/src/Upgrade/NoSeriesCopilotUpgrTags.Codeunit.al @@ -15,4 +15,9 @@ codeunit 326 "No. Series Copilot Upgr. Tags" begin exit('MS-659-AddImplementationExtensibility-20240304'); //659 is the id of the issue https://github.com/microsoft/BCApps/issues/659 end; + + procedure GetModifyCapabilityUpgradeTag(): Code[250] + begin + exit('MS-581366-BillingTypeToNoSeriesAICapability-20250731'); + end; } diff --git a/src/System Application/App/AI/src/Copilot/CopilotCapability.Codeunit.al b/src/System Application/App/AI/src/Copilot/CopilotCapability.Codeunit.al index a5f977e6e7..c1d7bc71a9 100644 --- a/src/System Application/App/AI/src/Copilot/CopilotCapability.Codeunit.al +++ b/src/System Application/App/AI/src/Copilot/CopilotCapability.Codeunit.al @@ -165,4 +165,18 @@ codeunit 7773 "Copilot Capability" procedure OnGetRequiredPrivacyNotices(CopilotCapability: Enum "Copilot Capability"; AppId: Guid; var RequiredPrivacyNotices: List of [Code[50]]) begin end; + + /// + /// Check if Billing Type has been defined + /// + /// The capability. + /// True if the billing type has been defined. + /// Capabilities are tied to the module registering it. Checking for a capability will check if the enum and app id of your module exists. + procedure IsBillingTypeDefined(CopilotCapability: Enum "Copilot Capability"): Boolean + var + CallerModuleInfo: ModuleInfo; + begin + NavApp.GetCallerModuleInfo(CallerModuleInfo); + exit(CopilotCapabilityImpl.IsBillingTypeDefined(CopilotCapability, CallerModuleInfo)); + end; } \ No newline at end of file diff --git a/src/System Application/App/AI/src/Copilot/CopilotCapabilityImpl.Codeunit.al b/src/System Application/App/AI/src/Copilot/CopilotCapabilityImpl.Codeunit.al index b70d2afb5c..4b7d515f14 100644 --- a/src/System Application/App/AI/src/Copilot/CopilotCapabilityImpl.Codeunit.al +++ b/src/System Application/App/AI/src/Copilot/CopilotCapabilityImpl.Codeunit.al @@ -537,4 +537,10 @@ codeunit 7774 "Copilot Capability Impl" begin exit(EnvironmentInformation.IsProduction()); end; + + procedure IsBillingTypeDefined(CopilotCapability: Enum "Copilot Capability"; CallerModuleInfo: ModuleInfo): Boolean + begin + if IsCapabilityRegistered(CopilotCapability, CallerModuleInfo) then + exit(CopilotSettings."Billing Type" <> Enum::"Copilot Billing Type"::Undefined); + end; } \ No newline at end of file diff --git a/src/System Application/App/AI/src/Copilot/CopilotCapabilityInstall.Codeunit.al b/src/System Application/App/AI/src/Copilot/CopilotCapabilityInstall.Codeunit.al index 7409d2f1c7..3fea59e815 100644 --- a/src/System Application/App/AI/src/Copilot/CopilotCapabilityInstall.Codeunit.al +++ b/src/System Application/App/AI/src/Copilot/CopilotCapabilityInstall.Codeunit.al @@ -65,4 +65,22 @@ codeunit 7760 "Copilot Capability Install" if not RequiredPrivacyNotices.Contains(SystemPrivacyNoticeReg.GetMicrosoftLearnID()) then RequiredPrivacyNotices.Add(SystemPrivacyNoticeReg.GetMicrosoftLearnID()); end; + + internal procedure ModifyCapabilities() + begin + ModifySaaSCapability(Enum::"Copilot Capability"::"Analyze List", Enum::"Copilot Availability"::Preview, Enum::"Copilot Billing Type"::"Not Billed", AnalyzeListLearnMoreLbl); + ModifySaaSCapability(Enum::"Copilot Capability"::Autofill, Enum::"Copilot Availability"::Preview, Enum::"Copilot Billing Type"::"Not Billed", AutofillLearnMoreLbl); + ModifySaaSCapability(Enum::"Copilot Capability"::Chat, Enum::"Copilot Availability"::Preview, Enum::"Copilot Billing Type"::"Not Billed", ChatLearnMoreLbl); + ModifySaaSCapability(Enum::"Copilot Capability"::Summarize, Enum::"Copilot Availability"::Preview, Enum::"Copilot Billing Type"::"Not Billed", SummarizeLearnMoreLbl); + end; + + local procedure ModifySaaSCapability(Capability: Enum "Copilot Capability"; Availability: Enum "Copilot Availability"; BillingType: Enum "Copilot Billing Type"; LearnMoreUrl: Text[2048]) + var + CopilotCapability: Codeunit "Copilot Capability"; + EnvironmentInformation: Codeunit "Environment Information"; + begin + if EnvironmentInformation.IsSaaSInfrastructure() then + if not (CopilotCapability.IsBillingTypeDefined(Capability)) then + CopilotCapability.ModifyCapability(Capability, Availability, BillingType, LearnMoreUrl); + end; } \ No newline at end of file diff --git a/src/System Application/App/AI/src/Copilot/CopilotCapabilityUpgrade.Codeunit.al b/src/System Application/App/AI/src/Copilot/CopilotCapabilityUpgrade.Codeunit.al index c348dc5170..24d6c22423 100644 --- a/src/System Application/App/AI/src/Copilot/CopilotCapabilityUpgrade.Codeunit.al +++ b/src/System Application/App/AI/src/Copilot/CopilotCapabilityUpgrade.Codeunit.al @@ -4,6 +4,8 @@ // ------------------------------------------------------------------------------------------------ namespace System.AI; +using System.Upgrade; + codeunit 7776 "Copilot Capability Upgrade" { Subtype = Upgrade; @@ -13,7 +15,18 @@ codeunit 7776 "Copilot Capability Upgrade" trigger OnUpgradePerDatabase() var CopilotCapabilityInstall: Codeunit "Copilot Capability Install"; + UpgradeTag: Codeunit "Upgrade Tag"; begin CopilotCapabilityInstall.RegisterCapabilities(); + + if not UpgradeTag.HasUpgradeTag(GetAddBillingTypeToCapabilityTag()) then begin + CopilotCapabilityInstall.ModifyCapabilities(); + UpgradeTag.SetUpgradeTag(GetAddBillingTypeToCapabilityTag()); + end; + end; + + internal procedure GetAddBillingTypeToCapabilityTag(): Text[250] + begin + exit('MS-581366-AddBillingTypeToCapabilityTag-20250731'); end; } \ No newline at end of file diff --git a/src/System Application/App/Entity Text/src/EntityTextAIUpgrade.Codeunit.al b/src/System Application/App/Entity Text/src/EntityTextAIUpgrade.Codeunit.al index a434ffa88e..ac633d15b7 100644 --- a/src/System Application/App/Entity Text/src/EntityTextAIUpgrade.Codeunit.al +++ b/src/System Application/App/Entity Text/src/EntityTextAIUpgrade.Codeunit.al @@ -33,6 +33,14 @@ codeunit 2015 "Entity Text AI Upgrade" UpgradeTag.SetUpgradeTag(GetRegisterMarketingTextCapabilityTag()); end; + + if not UpgradeTag.HasUpgradeTag(GetAddBillingTypeToMarketingTextCapabilityTag()) then begin + if EnvironmentInformation.IsSaaSInfrastructure() then + if not CopilotCapability.IsBillingTypeDefined(Enum::"Copilot Capability"::"Entity Text") then + CopilotCapability.ModifyCapability(Enum::"Copilot Capability"::"Entity Text", Enum::"Copilot Availability"::"Generally Available", Enum::"Copilot Billing Type"::"Not Billed", LearnMoreUrlTxt); + + UpgradeTag.SetUpgradeTag(GetAddBillingTypeToMarketingTextCapabilityTag()); + end; end; internal procedure GetRegisterMarketingTextCapabilityTag(): Code[250] @@ -40,4 +48,8 @@ codeunit 2015 "Entity Text AI Upgrade" exit('MS-490070-RegisterMarketingTextCapability-20231031'); end; + internal procedure GetAddBillingTypeToMarketingTextCapabilityTag(): Code[250] + begin + exit('MS-581366-AddBillingTypeToMarketingTextCapability-20250731'); + end; } \ No newline at end of file