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