Page 6084 Service Line Price Adjmt., source in 29

Source29

src/Layers/W1/BaseApp/Service/Pricing/ServiceLinePriceAdjmt.Page.al309 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.Service.Pricing;

using Microsoft.Service.Document;

page 6084 "Service Line Price Adjmt."
{
    Caption = 'Service Line Price Adjmt.';
    DataCaptionFields = "Document Type", "Document No.";
    DeleteAllowed = false;
    InsertAllowed = false;
    PageType = Worksheet;
    SourceTable = "Service Line Price Adjmt.";

    layout
    {
        area(content)
        {
            group(General)
            {
                Caption = 'General';
                field("Service Item No."; Rec."Service Item No.")
                {
                    ApplicationArea = Service;
                    Editable = false;
                }
                field("ServItemLine.Description"; ServItemLine.Description)
                {
                    ApplicationArea = Service;
                    Caption = 'Description';
                    Editable = false;
                    ToolTip = 'Specifies the description of the service item for which the price is going to be adjusted.';
                }
                field("Service Price Group Code"; Rec."Service Price Group Code")
                {
                    ApplicationArea = Service;
                    Caption = 'Service Price Group Code';
                    Editable = false;
                }
                field("Serv. Price Adjmt. Gr. Code"; Rec."Serv. Price Adjmt. Gr. Code")
                {
                    ApplicationArea = Service;
                    Editable = false;
                }
                field("Adjustment Type"; Rec."Adjustment Type")
                {
                    ApplicationArea = Service;
                    Caption = 'Adjustment Type';
                    Editable = false;
                }
            }
            repeater(Control1)
            {
                ShowCaption = false;
                field(Type; Rec.Type)
                {
                    ApplicationArea = Service;
                }
                field("No."; Rec."No.")
                {
                    ApplicationArea = Service;
                }
                field(Description; Rec.Description)
                {
                    ApplicationArea = Service;
                }
                field(Quantity; Rec.Quantity)
                {
                    ApplicationArea = Service;
                }
                field("Unit Price"; Rec."Unit Price")
                {
                    ApplicationArea = Service;
                }
                field("New Unit Price"; Rec."New Unit Price")
                {
                    ApplicationArea = Service;

                    trigger OnValidate()
                    begin
                        NewUnitPriceOnAfterValidate();
                    end;
                }
                field("Discount %"; Rec."Discount %")
                {
                    ApplicationArea = Service;
                }
                field("Discount Amount"; Rec."Discount Amount")
                {
                    ApplicationArea = Service;
                }
                field(Amount; Rec.Amount)
                {
                    ApplicationArea = Service;
                }
                field("New Amount"; Rec."New Amount")
                {
                    ApplicationArea = Service;

                    trigger OnValidate()
                    begin
                        NewAmountOnAfterValidate();
                    end;
                }
                field("Amount incl. VAT"; Rec."Amount incl. VAT")
                {
                    ApplicationArea = Service;
                }
                field("New Amount incl. VAT"; Rec."New Amount incl. VAT")
                {
                    ApplicationArea = Service;

                    trigger OnValidate()
                    begin
                        NewAmountinclVATOnAfterValidat();
                    end;
                }
            }
            group(Control2)
            {
                ShowCaption = false;
                fixed(Control1900116601)
                {
                    ShowCaption = false;
                    group(Total)
                    {
                        Caption = 'Total';
                        field(TotalAmount; TotalAmount)
                        {
                            ApplicationArea = Service;
                            AutoFormatExpression = Rec.GetCurrency();
                            AutoFormatType = 1;
                            Caption = 'Amount';
                            Editable = false;
                            ToolTip = 'Specifies the total amount that the service lines will be adjusted to.';
                        }
                    }
                    group("To Adjust")
                    {
                        Caption = 'To Adjust';
                        field(AmountToAdjust; AmountToAdjust)
                        {
                            ApplicationArea = Service;
                            AutoFormatExpression = Rec.GetCurrency();
                            AutoFormatType = 1;
                            Caption = 'To Adjust';
                            Editable = false;
                            ToolTip = 'Specifies the total value of the service lines that need to be adjusted.';
                        }
                    }
                    group(Remaining)
                    {
                        Caption = 'Remaining';
                        field(Control3; Remaining)
                        {
                            ApplicationArea = Service;
                            AutoFormatExpression = Rec.GetCurrency();
                            AutoFormatType = 1;
                            Caption = 'Remaining';
                            Editable = false;
                            ToolTip = 'Specifies the difference between the total amount that the service lines will be adjusted to, and actual total value of the service lines.';
                        }
                    }
                    group("Incl. VAT")
                    {
                        Caption = 'Incl. VAT';
                        field(InclVat; InclVat)
                        {
                            ApplicationArea = Service;
                            Caption = 'Incl. VAT';
                            Editable = false;
                            ToolTip = 'Specifies that the amount of the service lines includes VAT.';
                        }
                    }
                }
            }
        }
        area(factboxes)
        {
            systempart(Control1900383207; Links)
            {
                ApplicationArea = RecordLinks;
                Visible = false;
            }
            systempart(Control1905767507; Notes)
            {
                ApplicationArea = Notes;
                Visible = false;
            }
        }
    }

    actions
    {
        area(processing)
        {
            group("F&unctions")
            {
                Caption = 'F&unctions';
                Image = "Action";
                action("Adjust Service Price")
                {
                    ApplicationArea = Service;
                    Caption = 'Adjust Service Price';
                    Image = PriceAdjustment;
                    ToolTip = 'Adjust existing service prices according to changed costs, spare parts, and resource hours. Note that prices are not adjusted for service items that belong to service contracts, service items with a warranty, items service on lines that are partially or fully invoiced. When you run the service price adjustment, all discounts in the order are replaced by the values of the service price adjustment.';

                    trigger OnAction()
                    var
                        ServHeader: Record "Service Header";
                        ServPriceGrSetup: Record "Serv. Price Group Setup";
                        ServInvLinePriceAdjmt: Record "Service Line Price Adjmt.";
                        ServPriceMgmt: Codeunit "Service Price Management";
                    begin
                        ServHeader.Get(Rec."Document Type", Rec."Document No.");
                        ServItemLine.Get(Rec."Document Type", Rec."Document No.", Rec."Service Item Line No.");
                        ServPriceMgmt.GetServPriceGrSetup(ServPriceGrSetup, ServHeader, ServItemLine);
                        ServInvLinePriceAdjmt := Rec;
                        ServPriceMgmt.AdjustLines(ServInvLinePriceAdjmt, ServPriceGrSetup);
                        UpdateAmounts();
                        CurrPage.Update();
                    end;
                }
            }
        }
    }

    trigger OnAfterGetRecord()
    begin
        UpdateAmounts();
    end;

    trigger OnOpenPage()
    begin
        OKPressed := false;
    end;

    trigger OnQueryClosePage(CloseAction: Action): Boolean
    begin
        if CloseAction in [ACTION::OK, ACTION::LookupOK] then
            OKOnPush();
        if not OKPressed then
            if not Confirm(Text001, false) then
                exit(false);
        exit(true);
    end;

    var
        ServItemLine: Record "Service Item Line";
        ServInvLinePriceAdjmt: Record "Service Line Price Adjmt.";
        TotalAmount: Decimal;
        AmountToAdjust: Decimal;
        Remaining: Decimal;
        InclVat: Boolean;
        OKPressed: Boolean;
#pragma warning disable AA0074
        Text001: Label 'Cancel price adjustment?';
#pragma warning restore AA0074

    procedure SetVars(SetTotalAmount: Decimal; SetInclVat: Boolean)
    begin
        TotalAmount := SetTotalAmount;
        InclVat := SetInclVat;
    end;

    procedure UpdateAmounts()
    begin
        if not ServItemLine.Get(Rec."Document Type", Rec."Document No.", Rec."Service Item Line No.") then
            Clear(ServItemLine);
        ServInvLinePriceAdjmt := Rec;
        ServInvLinePriceAdjmt.Reset();
        ServInvLinePriceAdjmt.SetRange("Document Type", Rec."Document Type");
        ServInvLinePriceAdjmt.SetRange("Document No.", Rec."Document No.");
        ServInvLinePriceAdjmt.SetRange("Service Item Line No.", Rec."Service Item Line No.");
        ServInvLinePriceAdjmt.CalcSums("New Amount", "New Amount incl. VAT", "New Amount Excl. VAT");
        if InclVat then begin
            AmountToAdjust := ServInvLinePriceAdjmt."New Amount incl. VAT";
            Remaining := TotalAmount - ServInvLinePriceAdjmt."New Amount incl. VAT";
        end else begin
            AmountToAdjust := ServInvLinePriceAdjmt."New Amount Excl. VAT";
            Remaining := TotalAmount - ServInvLinePriceAdjmt."New Amount Excl. VAT";
        end;
    end;

    local procedure NewUnitPriceOnAfterValidate()
    begin
        CurrPage.Update();
    end;

    local procedure NewAmountOnAfterValidate()
    begin
        CurrPage.Update();
    end;

    local procedure NewAmountinclVATOnAfterValidat()
    begin
        CurrPage.Update();
    end;

    local procedure OKOnPush()
    begin
        OKPressed := true;
    end;
}