Skip to content
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
namespace Microsoft.SubscriptionBilling;

using Microsoft.Finance.GeneralLedger.Account;
using Microsoft.Foundation.AuditCodes;
using Microsoft.Inventory.Item;
using Microsoft.Purchases.Vendor;
using System.Utilities;

table 8062 "Cust. Sub. Contract Line"
Expand Down Expand Up @@ -338,13 +340,15 @@ table 8062 "Cust. Sub. Contract Line"
var
VendorServiceCommitment: Record "Subscription Line";
VendorContract: Record "Vendor Subscription Contract";
SourceCodeSetup: Record "Source Code Setup";
begin
SourceCodeSetup.Get();
VendorServiceCommitment.FilterOnServiceObjectAndPackage(ServiceCommitment."Subscription Header No.", ServiceCommitment.Template, ServiceCommitment."Subscription Package Code", Enum::"Service Partner"::Vendor);
if VendorServiceCommitment.FindSet() then
repeat
VendorServiceCommitment.SetDefaultDimensions(true);
if VendorContract.Get(VendorServiceCommitment."Subscription Contract No.") then
VendorServiceCommitment.GetCombinedDimensionSetID(VendorServiceCommitment."Dimension Set ID", VendorContract."Dimension Set ID");
VendorServiceCommitment.ApplyContractDimensions(VendorContract."Dimension Set ID", SourceCodeSetup.Purchases, Database::Vendor);
VendorServiceCommitment.Modify(false);
until VendorServiceCommitment.Next() = 0;
end;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2090,6 +2090,7 @@ table 8052 "Customer Subscription Contract"
var
ServiceObject: Record "Subscription Header";
CustomerContract: Record "Customer Subscription Contract";
SourceCodeSetup: Record "Source Code Setup";
OldDimSetID: Integer;
InitHarmonizedBillingFields: Boolean;
begin
Expand All @@ -2109,7 +2110,8 @@ table 8052 "Customer Subscription Contract"
ServiceCommitment."Subscription Contract No." := CustomerContractLine."Subscription Contract No.";
ServiceCommitment."Subscription Contract Line No." := CustomerContractLine."Line No.";

ServiceCommitment.GetCombinedDimensionSetID(ServiceCommitment."Dimension Set ID", CustomerContract."Dimension Set ID");
SourceCodeSetup.Get();
ServiceCommitment.ApplyContractDimensions(CustomerContract."Dimension Set ID", SourceCodeSetup.Sales, Database::Customer);
if "Currency Code" <> ServiceCommitment."Currency Code" then begin
CalculateCurrencyFactor(ServiceCommitment."Subscription Line Start Date", CustomerContract."Currency Code");
ServiceCommitment.SetCurrencyData(CurrencyFactor, CurrencyFactorDate, CustomerContract."Currency Code");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
namespace Microsoft.SubscriptionBilling;

using Microsoft.Foundation.AuditCodes;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;

codeunit 8007 "Create Sub. Contract Line"
{
TableNo = "Imported Subscription Line";
Expand Down Expand Up @@ -70,6 +74,7 @@ codeunit 8007 "Create Sub. Contract Line"
local procedure CreateCustomerContractLine()
var
CustomerContractLine: Record "Cust. Sub. Contract Line";
SourceCodeSetup: Record "Source Code Setup";
OldDimSetID: Integer;
begin
OnBeforeCreateCustomerContractLine(ServiceCommitment, ImportedServiceCommitment);
Expand All @@ -86,7 +91,8 @@ codeunit 8007 "Create Sub. Contract Line"
OldDimSetID := ServiceCommitment."Dimension Set ID";
ServiceCommitment."Subscription Contract No." := CustomerContractLine."Subscription Contract No.";
ServiceCommitment."Subscription Contract Line No." := CustomerContractLine."Line No.";
ServiceCommitment.GetCombinedDimensionSetID(ServiceCommitment."Dimension Set ID", CustomerContract."Dimension Set ID");
SourceCodeSetup.Get();
ServiceCommitment.ApplyContractDimensions(CustomerContract."Dimension Set ID", SourceCodeSetup.Sales, Database::Customer);
ServiceCommitment.Modify(true);
ServiceCommitment.UpdateRelatedVendorServiceCommDimensions(OldDimSetID, ServiceCommitment."Dimension Set ID");
end;
Expand Down Expand Up @@ -117,6 +123,7 @@ codeunit 8007 "Create Sub. Contract Line"
local procedure CreateVendorContractLine()
var
VendorContractLine: Record "Vend. Sub. Contract Line";
SourceCodeSetup: Record "Source Code Setup";
begin
OnBeforeCreateVendorContractLine(ServiceCommitment, ImportedServiceCommitment);
if ImportedServiceCommitment.IsContractCommentLine() then
Expand All @@ -132,7 +139,8 @@ codeunit 8007 "Create Sub. Contract Line"
ServiceCommitment."Subscription Contract No." := VendorContractLine."Subscription Contract No.";
ServiceCommitment."Subscription Contract Line No." := VendorContractLine."Line No.";

ServiceCommitment.GetCombinedDimensionSetID(ServiceCommitment."Dimension Set ID", VendorContract."Dimension Set ID");
SourceCodeSetup.Get();
ServiceCommitment.ApplyContractDimensions(VendorContract."Dimension Set ID", SourceCodeSetup.Purchases, Database::Vendor);
ServiceCommitment.Modify(false);
VendorContractLine.UpdateServiceCommitmentDimensions();
end;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ namespace Microsoft.SubscriptionBilling;
using Microsoft.Finance.Currency;
using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Account;
using Microsoft.Foundation.AuditCodes;
using Microsoft.Foundation.Calendar;
using Microsoft.Inventory.Item;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;
using Microsoft.Sales.Document;
using Microsoft.Sales.Pricing;
using System.Utilities;
Expand Down Expand Up @@ -1099,24 +1102,52 @@ table 8059 "Subscription Line"

internal procedure SetDefaultDimensions(UseSource: Boolean)
var
ServiceObject: Record "Subscription Header";
DefaultDimSource: List of [Dictionary of [Integer, Code[20]]];
begin
AddDefaultDimensionSources(DefaultDimSource, UseSource);
"Dimension Set ID" := DimMgt.GetDefaultDimID(DefaultDimSource, '', "Shortcut Dimension 1 Code", "Shortcut Dimension 2 Code", 0, 0);
DimMgt.UpdateGlobalDimFromDimSetID("Dimension Set ID", "Shortcut Dimension 1 Code", "Shortcut Dimension 2 Code");
end;

internal procedure ApplyContractDimensions(ContractDimSetID: Integer; SourceCode: Code[10]; ContractPartnerTableID: Integer)
var
DefaultDimSource: List of [Dictionary of [Integer, Code[20]]];
HighPriorityDimSource: List of [Dictionary of [Integer, Code[20]]];
DimSetIDArr: array[10] of Integer;
TempDimValue1: Code[20];
TempDimValue2: Code[20];
begin
DimSetIDArr[1] := "Dimension Set ID";
DimSetIDArr[2] := ContractDimSetID;

AddDefaultDimensionSources(DefaultDimSource, true);

if DimMgt.GetTableIDsForHigherPriorities(DefaultDimSource, HighPriorityDimSource, SourceCode, ContractPartnerTableID) then
DimSetIDArr[3] :=
DimMgt.GetRecDefaultDimID(
Rec, CurrFieldNo, HighPriorityDimSource, SourceCode,
TempDimValue1, TempDimValue2, 0, 0);

"Dimension Set ID" :=
DimMgt.GetCombinedDimensionSetID(DimSetIDArr, "Shortcut Dimension 1 Code", "Shortcut Dimension 2 Code");
OnAfterGetCombinedDimensionSetID(Rec);
end;

local procedure AddDefaultDimensionSources(var DefaultDimSource: List of [Dictionary of [Integer, Code[20]]]; UseSource: Boolean)
var
ServiceObject: Record "Subscription Header";
begin
if Rec."Invoicing Item No." <> '' then
DimMgt.AddDimSource(DefaultDimSource, Database::Item, Rec."Invoicing Item No.");

if UseSource then begin
ServiceObject.Get("Subscription Header No.");
case ServiceObject.Type of
ServiceObject.Type::Item:
DimMgt.AddDimSource(DefaultDimSource, Database::Item, ServiceObject."Source No.");
ServiceObject.Type::"G/L Account":
DimMgt.AddDimSource(DefaultDimSource, Database::"G/L Account", ServiceObject."Source No.");
end;
end;

"Dimension Set ID" := DimMgt.GetDefaultDimID(DefaultDimSource, '', "Shortcut Dimension 1 Code", "Shortcut Dimension 2 Code", 0, 0);
DimMgt.UpdateGlobalDimFromDimSetID("Dimension Set ID", "Shortcut Dimension 1 Code", "Shortcut Dimension 2 Code");
if UseSource then
if ServiceObject.Get("Subscription Header No.") then
case ServiceObject.Type of
ServiceObject.Type::Item:
DimMgt.AddDimSource(DefaultDimSource, Database::Item, ServiceObject."Source No.");
ServiceObject.Type::"G/L Account":
DimMgt.AddDimSource(DefaultDimSource, Database::"G/L Account", ServiceObject."Source No.");
end;
end;

internal procedure GetCombinedDimensionSetID(DimSetID1: Integer; DimSetID2: Integer)
Expand Down Expand Up @@ -1230,18 +1261,24 @@ table 8059 "Subscription Line"
end;

internal procedure UpdateFromCustomerContract(CustomerContract: Record "Customer Subscription Contract")
var
SourceCodeSetup: Record "Source Code Setup";
begin
"Currency Code" := CustomerContract."Currency Code";
InitCurrencyData();
GetCombinedDimensionSetID("Dimension Set ID", CustomerContract."Dimension Set ID");
SourceCodeSetup.Get();
ApplyContractDimensions(CustomerContract."Dimension Set ID", SourceCodeSetup.Sales, Database::Customer);
"Exclude from Price Update" := CustomerContract.DefaultExcludeFromPriceUpdate;
end;

internal procedure UpdateFromVendorContract(VendorContract: Record "Vendor Subscription Contract")
var
SourceCodeSetup: Record "Source Code Setup";
begin
"Currency Code" := VendorContract."Currency Code";
InitCurrencyData();
GetCombinedDimensionSetID("Dimension Set ID", VendorContract."Dimension Set ID");
SourceCodeSetup.Get();
ApplyContractDimensions(VendorContract."Dimension Set ID", SourceCodeSetup.Purchases, Database::Vendor);
"Exclude from Price Update" := VendorContract.DefaultExcludeFromPriceUpdate;
end;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
namespace Microsoft.SubscriptionBilling;

using Microsoft.Finance.GeneralLedger.Account;
using Microsoft.Foundation.AuditCodes;
using Microsoft.Inventory.Item;
using Microsoft.Sales.Customer;
using System.Utilities;

table 8065 "Vend. Sub. Contract Line"
Expand Down Expand Up @@ -306,6 +308,7 @@ table 8065 "Vend. Sub. Contract Line"
ServiceCommitment: Record "Subscription Line";
CustomerServiceCommitment: Record "Subscription Line";
CustomerContract: Record "Customer Subscription Contract";
SourceCodeSetup: Record "Source Code Setup";
begin
if Rec."Subscription Header No." = '' then
exit;
Expand All @@ -315,8 +318,10 @@ table 8065 "Vend. Sub. Contract Line"
ServiceCommitment.SetDefaultDimensions(true);
CustomerServiceCommitment.FilterOnServiceObjectAndPackage(Rec."Subscription Header No.", ServiceCommitment.Template, ServiceCommitment."Subscription Package Code", Enum::"Service Partner"::Customer);
if CustomerServiceCommitment.FindFirst() then
if CustomerContract.Get(CustomerServiceCommitment."Subscription Contract No.") then
ServiceCommitment.GetCombinedDimensionSetID(ServiceCommitment."Dimension Set ID", CustomerContract."Dimension Set ID");
if CustomerContract.Get(CustomerServiceCommitment."Subscription Contract No.") then begin
SourceCodeSetup.Get();
ServiceCommitment.ApplyContractDimensions(CustomerContract."Dimension Set ID", SourceCodeSetup.Sales, Database::Customer);
end;
ServiceCommitment.Modify(false);
end;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1598,6 +1598,7 @@ table 8063 "Vendor Subscription Contract"
var
ServiceObject: Record "Subscription Header";
VendorContract: Record "Vendor Subscription Contract";
SourceCodeSetup: Record "Source Code Setup";
begin
ServiceObject.Get(ServiceCommitment."Subscription Header No.");
VendorContractLine.InitFromServiceCommitment(ServiceCommitment, ContractNo);
Expand All @@ -1607,7 +1608,8 @@ table 8063 "Vendor Subscription Contract"
ServiceCommitment."Subscription Contract Line No." := VendorContractLine."Line No.";

VendorContract.Get(ServiceCommitment."Subscription Contract No.");
ServiceCommitment.GetCombinedDimensionSetID(ServiceCommitment."Dimension Set ID", VendorContract."Dimension Set ID");
SourceCodeSetup.Get();
ServiceCommitment.ApplyContractDimensions(VendorContract."Dimension Set ID", SourceCodeSetup.Purchases, Database::Vendor);
if "Currency Code" <> ServiceCommitment."Currency Code" then begin
CalculateCurrencyFactor(ServiceCommitment."Subscription Line Start Date", VendorContract."Currency Code");
ServiceCommitment.SetCurrencyData(CurrencyFactor, CurrencyFactorDate, VendorContract."Currency Code");
Expand Down
Loading
Loading