Table 226 VAT Reg. No. Srv. Template, source in 29
Source29
src/Layers/W1/BaseApp/Finance/VAT/Registration/VATRegNoSrvTemplate.Table.al196 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Finance.VAT.Registration;
using Microsoft.Foundation.Address;
/// <summary>
/// Defines validation templates for VAT registration number service with country and account-specific configuration.
/// Controls validation behavior and detail handling for different business entity types and jurisdictions.
/// </summary>
table 226 "VAT Reg. No. Srv. Template"
{
Caption = 'VAT Reg. No. Validation Template';
LookupPageId = "VAT Reg. No. Srv. Templates";
DataClassification = CustomerContent;
fields
{
/// <summary>
/// Unique identifier for the VAT registration service validation template.
/// </summary>
field(1; Code; Code[20])
{
Caption = 'Code';
ToolTip = 'Specifies the template code.';
}
/// <summary>
/// Country/region code that determines the geographical scope for this validation template.
/// </summary>
field(10; "Country/Region Code"; Code[10])
{
Caption = 'Country/Region Code';
TableRelation = "Country/Region".Code;
ToolTip = 'Specifies the country/region code.';
}
/// <summary>
/// Account type that determines which business entity type this template applies to.
/// </summary>
field(11; "Account Type"; Enum "VAT Reg. No. Srv. Template Account Type")
{
Caption = 'Account Type';
ToolTip = 'Specifies the account type.';
}
/// <summary>
/// Specific account number to limit template application to a particular business entity.
/// </summary>
field(12; "Account No."; Code[20])
{
Caption = 'Account No.';
ToolTip = 'Specifies the account number.';
}
/// <summary>
/// Indicates whether to validate entity name against VIES service response.
/// </summary>
field(20; "Validate Name"; Boolean)
{
Caption = 'Validate Name';
ToolTip = 'Specifies if the name value is validated.';
}
/// <summary>
/// Indicates whether to validate street address against VIES service response.
/// </summary>
field(21; "Validate Street"; Boolean)
{
Caption = 'Validate Street';
ToolTip = 'Specifies if the street value is validated.';
}
/// <summary>
/// Indicates whether to validate city against VIES service response.
/// </summary>
field(22; "Validate City"; Boolean)
{
Caption = 'Validate City';
ToolTip = 'Specifies if the city value is validated.';
}
/// <summary>
/// Indicates whether to validate postal code against VIES service response.
/// </summary>
field(23; "Validate Post Code"; Boolean)
{
Caption = 'Validate Post Code';
ToolTip = 'Specifies if the post code value is validated.';
}
/// <summary>
/// Controls whether to ignore detailed validation information from VIES service.
/// </summary>
field(24; "Ignore Details"; Boolean)
{
Caption = 'Ignore Details';
ToolTip = 'Specifies if you want to exclude any detailed information that the validation service returns. Choose the field to view all validation details.';
}
}
keys
{
key(PK; Code)
{
Clustered = true;
}
}
var
DefaultTxt: Label 'Default';
/// <summary>
/// Finds the most appropriate validation template for the given VAT registration log entry.
/// Uses hierarchical matching based on country, account type, and account number.
/// </summary>
/// <param name="VATRegistrationLog">VAT registration log entry requiring template selection</param>
/// <returns>Template code for the most specific matching template or default template</returns>
procedure FindTemplate(VATRegistrationLog: Record "VAT Registration Log") Result: Code[20]
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeFindTemplate(VATRegistrationLog, IsHandled, Result, Rec);
if IsHandled then
exit(Result);
SetRange("Country/Region Code", VATRegistrationLog."Country/Region Code");
SetRange("Account Type", MapVATRegLogAccountType(VATRegistrationLog."Account Type"));
SetRange("Account No.", VATRegistrationLog."Account No.");
if FindFirst() then
exit(Code);
SetRange("Account No.", '');
if FindFirst() then
exit(Code);
SetRange("Account Type", "Account Type"::None);
if FindFirst() then
exit(Code);
exit(LoadDefaultTempalte());
end;
local procedure LoadDefaultTempalte(): Code[20]
var
VATRegNoSrvConfig: Record "VAT Reg. No. Srv Config";
begin
VATRegNoSrvConfig.Get();
CheckInitDefaultTemplate(VATRegNoSrvConfig);
VATRegNoSrvConfig.TestField("Default Template Code");
Get(VATRegNoSrvConfig."Default Template Code");
exit(Code);
end;
/// <summary>
/// Initializes default validation template if none exists and updates service configuration.
/// </summary>
/// <param name="VATRegNoSrvConfig">VAT registration service configuration to update with default template</param>
procedure CheckInitDefaultTemplate(var VATRegNoSrvConfig: Record "VAT Reg. No. Srv Config")
var
VATRegNoSrvTemplate: Record "VAT Reg. No. Srv. Template";
begin
if (VATRegNoSrvConfig."Default Template Code" = '') and (VATRegNoSrvTemplate.Count() = 0) then begin
VATRegNoSrvTemplate.Init();
VATRegNoSrvTemplate.Code := DefaultTxt;
if VATRegNoSrvTemplate.Insert() then;
VATRegNoSrvConfig."Default Template Code" := VATRegNoSrvTemplate.Code;
VATRegNoSrvConfig.Modify();
end;
end;
local procedure MapVATRegLogAccountType(VATRegLogAccountType: Enum "VAT Registration Log Account Type"): Enum "VAT Reg. No. Srv. Template Account Type"
var
DummyVATRegistrationLog: Record "VAT Registration Log";
begin
case VATRegLogAccountType of
DummyVATRegistrationLog."Account Type"::Customer:
exit("Account Type"::Customer);
DummyVATRegistrationLog."Account Type"::Vendor:
exit("Account Type"::Vendor);
DummyVATRegistrationLog."Account Type"::Contact:
exit("Account Type"::Contact);
else
exit("Account Type"::None);
end;
end;
/// <summary>
/// Integration event raised before finding validation template to allow custom template selection logic.
/// </summary>
/// <param name="VATRegistrationLog">VAT registration log entry requiring template</param>
/// <param name="IsHandled">Set to true to skip standard template selection</param>
/// <param name="Result">Template code to use when custom logic is applied</param>
/// <param name="VATRegNoSrvTemplate">Template record for custom processing</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeFindTemplate(VATRegistrationLog: Record "VAT Registration Log"; var IsHandled: Boolean; var Result: Code[20]; var VATRegNoSrvTemplate: Record "VAT Reg. No. Srv. Template")
begin
end;
}