Table 5502 Tax Rate Buffer

App
Base Application
Namespace
Microsoft.Integration.Entity
Versions
17-28

Fields, 3Keys, 1Procedures, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Integration/Entity/TaxRateBuffer.Table.al152 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.Integration.Entity;

using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Finance.SalesTax;
using Microsoft.Finance.VAT.Setup;

table 5502 "Tax Rate Buffer"
{
    Caption = 'Tax Rate Buffer';
    ReplicateData = false;
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Tax Area ID"; Guid)
        {
            Caption = 'Tax Area ID';
            DataClassification = SystemMetadata;
            Editable = false;
        }
        field(2; "Tax Group ID"; Guid)
        {
            Caption = 'Tax Group ID';
            DataClassification = SystemMetadata;
            Editable = false;
        }
        field(3; "Tax Rate"; Decimal)
        {
            AutoFormatType = 0;
            Caption = 'Tax Rate';
            DataClassification = SystemMetadata;
            Editable = false;
        }
    }

    keys
    {
        key(Key1; "Tax Area ID", "Tax Group ID")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    var
        RecordMustBeTemporaryErr: Label 'Tax Rate Buffer Entity must be used as a temporary record.';

    procedure LoadRecords()
    var
        GeneralLedgerSetup: Record "General Ledger Setup";
    begin
        if not IsTemporary then
            Error(RecordMustBeTemporaryErr);

        if GeneralLedgerSetup.UseVat() then
            LoadVATRates()
        else
            LoadSalesTaxRates();
    end;

    local procedure LoadVATRates()
    var
        TempTaxAreaBuffer: Record "Tax Area Buffer" temporary;
        TempTaxGroupBuffer: Record "Tax Group Buffer" temporary;
        VATPostingSetup: Record "VAT Posting Setup";
    begin
        if not VATPostingSetup.FindSet() then
            exit;

        TempTaxGroupBuffer.LoadRecords();
        TempTaxAreaBuffer.LoadRecords();

        repeat
            InsertTaxRate(
              VATPostingSetup."VAT Prod. Posting Group", VATPostingSetup."VAT Bus. Posting Group", VATPostingSetup."VAT %",
              TempTaxAreaBuffer, TempTaxGroupBuffer);
        until VATPostingSetup.Next() = 0;
    end;

    local procedure LoadSalesTaxRates()
    var
        TempTaxAreaBuffer: Record "Tax Area Buffer" temporary;
        TempSearchTaxAreaBuffer: Record "Tax Area Buffer" temporary;
        TempTaxGroupBuffer: Record "Tax Group Buffer" temporary;
        DummyTaxDetail: Record "Tax Detail";
        TaxGroupsForTaxAreas: Query "Tax Groups For Tax Areas";
        TaxRate: Decimal;
    begin
        TempTaxAreaBuffer.LoadRecords();
        if not TempTaxAreaBuffer.Find('-') then
            exit;

        TempSearchTaxAreaBuffer.Copy(TempTaxAreaBuffer, true);
        TempTaxGroupBuffer.LoadRecords();

        repeat
            TaxGroupsForTaxAreas.SetRange(Tax_Area_Code, TempTaxAreaBuffer.Code);
            if not TaxGroupsForTaxAreas.Open() then
                exit;

            if not TaxGroupsForTaxAreas.Read() then
                exit;

            repeat
                TaxRate := DummyTaxDetail.GetSalesTaxRate(TempTaxAreaBuffer.Code, TaxGroupsForTaxAreas.Tax_Group_Code, WorkDate(), true);
                InsertTaxRate(
                  TaxGroupsForTaxAreas.Tax_Group_Code, TempTaxAreaBuffer.Code, TaxRate, TempSearchTaxAreaBuffer, TempTaxGroupBuffer);
            until not TaxGroupsForTaxAreas.Read();
        until TempTaxAreaBuffer.Next() = 0;
    end;

    local procedure FindTaxGroupByCode(TaxGroupCode: Code[20]; var TempTaxGroupBuffer: Record "Tax Group Buffer" temporary): Boolean
    begin
        TempTaxGroupBuffer.SetRange(Code, TaxGroupCode);
        exit(TempTaxGroupBuffer.FindFirst());
    end;

    local procedure FindTaxAreaByCode(TaxAreaCode: Code[20]; var TempTaxAreaBuffer: Record "Tax Area Buffer" temporary): Boolean
    begin
        TempTaxAreaBuffer.SetRange(Code, TaxAreaCode);
        exit(TempTaxAreaBuffer.FindFirst());
    end;

    local procedure InsertTaxRate(TaxGroupCode: Code[20]; TaxAreaCode: Code[20]; TaxRate: Decimal; var TempTaxAreaBuffer: Record "Tax Area Buffer" temporary; var TempTaxGroupBuffer: Record "Tax Group Buffer" temporary)
    begin
        Clear(Rec);
        if TaxGroupCode <> '' then
            if FindTaxGroupByCode(TaxGroupCode, TempTaxGroupBuffer) then
                Validate("Tax Group ID", TempTaxGroupBuffer.Id)
            else
                exit;

        if TaxAreaCode <> '' then
            if FindTaxAreaByCode(TaxAreaCode, TempTaxAreaBuffer) then
                Validate("Tax Area ID", TempTaxAreaBuffer.Id)
            else
                exit;

        Validate("Tax Rate", TaxRate);
        if not Insert(true) then
            Modify(true);
    end;
}