Codeunit 7048 Set Price Line Source Group

App
Base Application
Namespace
Microsoft.Pricing.PriceList
Versions
18-28

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Pricing/PriceList/SetPriceLineSourceGroup.Codeunit.al107 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.Pricing.PriceList;

using Microsoft.Upgrade;
using System.Upgrade;

codeunit 7048 "Set Price Line Source Group"
{
    trigger OnRun()
    var
        UpgradeTag: Codeunit "Upgrade Tag";
        UpgradeTagDefinitions: Codeunit "Upgrade Tag Definitions";
    begin
        if UpgradeTag.HasUpgradeTag(UpgradeTagDefinitions.GetPriceSourceGroupUpgradeTag()) then
            UpdatePriceListLineStatus()
        else
            UpdatePriceSourceGroupInPriceListLines();
        Message(CompletedTxt);
    end;

    var
        CompletedTxt: Label 'The task was successfully completed.';

    local procedure CommitAfter1KRecords(var Counter: Integer)
    begin
        Counter += 1;
        if Counter > 1000 then begin
            Counter := 0;
            Commit();
        end;
    end;

    local procedure UpdatePriceSourceGroupInPriceListLines()
    var
        PriceListLine: Record "Price List Line";
        UpgradeTag: Codeunit "Upgrade Tag";
        UpgradeTagDefinitions: Codeunit "Upgrade Tag Definitions";
        Counter: Integer;
    begin
        if UpgradeTag.HasUpgradeTag(UpgradeTagDefinitions.GetPriceSourceGroupFixedUpgradeTag()) then
            exit;

        PriceListLine.SetLoadFields("Source Group", "Source Type", "Price Type", Status);
        PriceListLine.SetRange("Source Group", PriceListLine."Source Group"::All);
        if PriceListLine.FindSet(true) then
            repeat
                if PriceListLine."Source Type" in
                    [PriceListLine."Source Type"::"All Jobs",
                    PriceListLine."Source Type"::Job,
                    PriceListLine."Source Type"::"Job Task"]
                then
                    PriceListLine."Source Group" := PriceListLine."Source Group"::Job
                else
                    case PriceListLine."Price Type" of
                        "Price Type"::Purchase:
                            PriceListLine."Source Group" := PriceListLine."Source Group"::Vendor;
                        "Price Type"::Sale:
                            PriceListLine."Source Group" := PriceListLine."Source Group"::Customer;
                    end;
                if PriceListLine."Source Group" <> PriceListLine."Source Group"::All then
                    if PriceListLine.Status = "Price Status"::Active then begin
                        PriceListLine.Status := "Price Status"::Draft;
                        PriceListLine.Modify();
                        PriceListLine.Status := "Price Status"::Active;
                        PriceListLine.Modify();
                    end else
                        PriceListLine.Modify();
                CommitAfter1KRecords(Counter);
            until PriceListLine.Next() = 0;

        UpgradeTag.SetUpgradeTag(UpgradeTagDefinitions.GetPriceSourceGroupFixedUpgradeTag());
    end;

    local procedure UpdatePriceListLineStatus()
    var
        PriceListHeader: Record "Price List Header";
        PriceListLine: Record "Price List Line";
        UpgradeTag: Codeunit "Upgrade Tag";
        UpgradeTagDefinitions: Codeunit "Upgrade Tag Definitions";
        Status: Enum "Price Status";
        Counter: Integer;
    begin
        if UpgradeTag.HasUpgradeTag(UpgradeTagDefinitions.GetSyncPriceListLineStatusUpgradeTag()) then
            exit;

        PriceListLine.SetLoadFields("Price List Code", Status);
        PriceListLine.SetRange(Status, "Price Status"::Draft);
        if PriceListLine.Findset(true) then
            repeat
                if PriceListHeader.Code <> PriceListLine."Price List Code" then
                    if PriceListHeader.Get(PriceListLine."Price List Code") then
                        Status := PriceListHeader.Status
                    else
                        Status := Status::Draft;
                if Status = Status::Active then begin
                    PriceListLine.Status := Status::Active;
                    PriceListLine.Modify();
                    CommitAfter1KRecords(Counter);
                end;
            until PriceListLine.Next() = 0;

        UpgradeTag.SetUpgradeTag(UpgradeTagDefinitions.GetSyncPriceListLineStatusUpgradeTag());
    end;
}