Page 6030 Service Statistics, source in 29
Source29
src/Layers/W1/BaseApp/Service/Document/ServiceStatistics.Page.al959 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.Document;
using Microsoft.Finance.Currency;
using Microsoft.Finance.VAT.Calculation;
using Microsoft.Sales.Customer;
using Microsoft.Sales.Pricing;
using Microsoft.Sales.Setup;
using Microsoft.Service.Posting;
page 6030 "Service Statistics"
{
Caption = 'Service Statistics';
DeleteAllowed = false;
InsertAllowed = false;
LinksAllowed = false;
PageType = ListPlus;
SourceTable = "Service Header";
layout
{
area(content)
{
group(General)
{
Caption = 'General';
field(Amount_General; TotalServLine[1]."Line Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text002, false);
Caption = 'Amount';
Editable = false;
ToolTip = 'Specifies the amount for the relevant service order.';
}
field("Inv. Discount Amount_General"; TotalServLine[1]."Inv. Discount Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Inv. Discount Amount';
ToolTip = 'Specifies the invoice discount amount for the entire service document.';
trigger OnValidate()
begin
UpdateInvDiscAmount();
end;
}
field(PmtDiscGivenAmount; TotalServLine[1]."Pmt. Discount Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Pmt. Discount Amount';
Editable = false;
ToolTip = 'Specifies the payment discount amount that you have granted to customers. ';
}
field("TotalAmount1[1]"; TotalAmount1[1])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text001, false);
Caption = 'Total';
ToolTip = 'Specifies the total amount on the service lines (including and excluding VAT), VAT part, cost, and profit on the service lines.';
trigger OnValidate()
begin
UpdateTotalAmount(1);
end;
}
field("VAT Amount_General"; VATAmount[1])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = Format(VATAmountText[1]);
Caption = 'VAT Amount';
Editable = false;
ToolTip = 'Specifies the total VAT amount that has been calculated for all the lines in the service document.';
}
field("Total Incl. VAT_General"; TotalAmount2[1])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text001, true);
Caption = 'Total Incl. VAT';
Editable = false;
ToolTip = 'Specifies the total amount on the service document, including VAT. This is the amount that will be posted to the customer''s account for all the lines in the service document.';
}
field("Sales (LCY)_General"; TotalServLineLCY[1].Amount)
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Sales (LCY)';
Editable = false;
ToolTip = 'Specifies your total service sales turnover in the fiscal year. It is calculated from amounts excluding VAT on all completed and open service sales invoices and credit memos.';
}
field("ProfitLCY[1]"; ProfitLCY[1])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Original Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the original profit that was associated with the service document.';
}
field("AdjProfitLCY[1]"; AdjProfitLCY[1])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Adjusted Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the amount of profit for the service document, in LCY, adjusted for any changes in the original item costs.';
}
field("ProfitPct[1]"; ProfitPct[1])
{
ApplicationArea = Service;
AutoFormatType = 0;
Caption = 'Original Profit %';
DecimalPlaces = 1 : 1;
Editable = false;
ToolTip = 'Specifies the amount of the original profit on the service document, expressed as percentage of the amount in the Amount field.';
}
field("AdjProfitPct[1]"; AdjProfitPct[1])
{
ApplicationArea = Service;
AutoFormatType = 0;
Caption = 'Adjusted Profit %';
DecimalPlaces = 1 : 1;
Editable = false;
ToolTip = 'Specifies the amount of the adjusted profit on the service document, expressed as percentage of the amount in the Amount field.';
}
field("TotalServLine[1].Quantity"; TotalServLine[1].Quantity)
{
ApplicationArea = Service;
Caption = 'Quantity';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the quantity of all G/L account entries, costs, items and/or resource hours in the service order.';
}
#pragma warning disable AA0100
field("TotalServLine[1].""Units per Parcel"""; TotalServLine[1]."Units per Parcel")
#pragma warning restore AA0100
{
ApplicationArea = Service;
Caption = 'Parcels';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the total number of parcels in the posted service credit memo.';
}
#pragma warning disable AA0100
field("TotalServLine[1].""Net Weight"""; TotalServLine[1]."Net Weight")
#pragma warning restore AA0100
{
ApplicationArea = Service;
Caption = 'Net Weight';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the net weight of the items specified on the service lines in the document.';
}
#pragma warning disable AA0100
field("TotalServLine[1].""Gross Weight"""; TotalServLine[1]."Gross Weight")
#pragma warning restore AA0100
{
ApplicationArea = Service;
Caption = 'Gross Weight';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the gross weight of the items on the service lines in the document.';
}
#pragma warning disable AA0100
field("TotalServLine[1].""Unit Volume"""; TotalServLine[1]."Unit Volume")
#pragma warning restore AA0100
{
ApplicationArea = Service;
Caption = 'Volume';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the volume of the items on the service lines in the document.';
}
#pragma warning disable AA0100
field("TotalServLineLCY[1].""Unit Cost (LCY)"""; TotalServLineLCY[1]."Unit Cost (LCY)")
#pragma warning restore AA0100
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Original Cost (LCY)';
Editable = false;
ToolTip = 'Specifies the total cost (in LCY) of the G/L account entries, costs, items and/or resource hours on the service document. The cost is calculated as a product of unit cost multiplied by quantity of the relevant items, resources and/or costs.';
}
field("TotalAdjCostLCY[1]"; TotalAdjCostLCY[1])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Adjusted Cost (LCY)';
Editable = false;
ToolTip = 'Specifies the total cost, in LCY, of the items in the service document, adjusted for any changes in the original costs of these items.';
}
#pragma warning disable AA0100
field("TotalAdjCostLCY[1] - TotalServLineLCY[1].""Unit Cost (LCY)"""; TotalAdjCostLCY[1] - TotalServLineLCY[1]."Unit Cost (LCY)")
#pragma warning restore AA0100
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Cost Adjmt. Amount (LCY)';
Editable = false;
ToolTip = 'Specifies the difference between the original cost and the total adjusted cost of the items in the service document.';
trigger OnDrillDown()
begin
Rec.LookupAdjmtValueEntries(0);
end;
}
}
part(SubForm; "VAT Specification Subform")
{
ApplicationArea = Service;
}
group("Service Line")
{
Caption = 'Service Line';
fixed(Control1904230801)
{
ShowCaption = false;
group(Items)
{
Caption = 'Items';
field("TotalServLine[5].Quantity"; TotalServLine[5].Quantity)
{
ApplicationArea = Service;
Caption = 'Quantity';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the quantity of all G/L account entries, costs, items and/or resource hours in the service order.';
}
field(Amount_Items; TotalServLine[5]."Line Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Amount';
Editable = false;
ToolTip = 'Specifies the amount for the relevant service order.';
}
field("Inv. Discount Amount_Items"; TotalServLine[5]."Inv. Discount Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Inv. Discount Amount';
Editable = false;
ToolTip = 'Specifies the invoice discount amount for the entire service document.';
}
field(Total; TotalAmount1[5])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Total';
Editable = false;
ToolTip = 'Specifies the total amount on the service lines (including and excluding VAT), VAT part, cost, and profit on the service lines.';
trigger OnValidate()
begin
UpdateTotalAmount(2);
end;
}
field("VAT Amount_Items"; VATAmount[5])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'VAT Amount';
Editable = false;
ToolTip = 'Specifies the total VAT amount that has been calculated for all the lines in the service document.';
}
field("Total Incl. VAT_Items"; TotalAmount2[5])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Total Amount';
Editable = false;
ToolTip = 'Specifies the total amount on the service lines including and excluding VAT, VAT part, cost, and profit on the service lines.';
}
field("Sales (LCY)_Items"; TotalServLineLCY[5].Amount)
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Sales (LCY)';
Editable = false;
ToolTip = 'Specifies your total service sales turnover in the fiscal year. It is calculated from amounts excluding VAT on all completed and open service sales invoices and credit memos.';
}
field("ProfitLCY[5]"; ProfitLCY[5])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Original Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the original profit that was associated with the service document.';
}
field("AdjProfitLCY[5]"; AdjProfitLCY[5])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Adjusted Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the amount of profit for the service document, in LCY, adjusted for any changes in the original item costs.';
}
field("ProfitPct[5]"; ProfitPct[5])
{
ApplicationArea = Service;
AutoFormatType = 0;
Caption = 'Original Profit %';
DecimalPlaces = 1 : 1;
Editable = false;
ToolTip = 'Specifies the amount of the original profit on the service document, expressed as percentage of the amount in the Amount field.';
}
field("AdjProfitPct[5]"; AdjProfitPct[5])
{
ApplicationArea = Service;
AutoFormatType = 0;
Caption = 'Adjusted Profit %';
DecimalPlaces = 1 : 1;
Editable = false;
ToolTip = 'Specifies the amount of the adjusted profit on the service document, expressed as percentage of the amount in the Amount field.';
}
#pragma warning disable AA0100
field("TotalServLineLCY[5].""Unit Cost (LCY)"""; TotalServLineLCY[5]."Unit Cost (LCY)")
#pragma warning restore AA0100
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Original Cost (LCY)';
Editable = false;
ToolTip = 'Specifies the total cost (in LCY) of the G/L account entries, costs, items and/or resource hours on the service document. The cost is calculated as a product of unit cost multiplied by quantity of the relevant items, resources and/or costs.';
}
field("TotalAdjCostLCY[5]"; TotalAdjCostLCY[5])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Adjusted Cost (LCY)';
Editable = false;
ToolTip = 'Specifies the total cost, in LCY, of the items in the service document, adjusted for any changes in the original costs of these items.';
}
#pragma warning disable AA0100
field("TotalAdjCostLCY[5] - TotalServLineLCY[5].""Unit Cost (LCY)"""; TotalAdjCostLCY[5] - TotalServLineLCY[5]."Unit Cost (LCY)")
#pragma warning restore AA0100
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Cost Adjmt. Amount (LCY)';
Editable = false;
ToolTip = 'Specifies the difference between the original cost and the total adjusted cost of the items in the service document.';
trigger OnDrillDown()
begin
Rec.LookupAdjmtValueEntries(1);
end;
}
}
group(Resources)
{
Caption = 'Resources';
field("TotalServLine[6].Quantity"; TotalServLine[6].Quantity)
{
ApplicationArea = Service;
Caption = 'Quantity';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the quantity of all G/L account entries, costs, items and/or resource hours in the service order.';
}
field(Amount_Resources; TotalServLine[6]."Line Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text002, false);
Editable = false;
}
field("Inv. Discount Amount_Resources"; TotalServLine[6]."Inv. Discount Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Inv. Discount Amount';
Editable = false;
ToolTip = 'Specifies the invoice discount amount for the entire service document.';
}
field("TotalAmount1[6]"; TotalAmount1[6])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text001, false);
Editable = false;
ShowCaption = false;
trigger OnValidate()
begin
UpdateTotalAmount(2);
end;
}
field("VAT Amount_Resources"; VATAmount[6])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Editable = false;
ShowCaption = false;
}
field("Total Incl. VAT_Resources"; TotalAmount2[6])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text001, true);
Editable = false;
}
field("Sales (LCY)_Resources"; TotalServLineLCY[6].Amount)
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Amount (LCY)';
Editable = false;
ToolTip = 'Specifies the amount of the ledger entry, in the local currency.';
}
field("ProfitLCY[6]"; ProfitLCY[6])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the profit related to the service document, in local currency.';
}
field("AdjProfitLCY[6]"; AdjProfitLCY[6])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the profit related to the service document, in local currency.';
}
field("ProfitPct[6]"; ProfitPct[6])
{
ApplicationArea = Service;
AutoFormatType = 0;
Caption = 'Profit %';
DecimalPlaces = 1 : 1;
Editable = false;
ToolTip = 'Specifies the amount of profit as percentage of the invoiced amount.';
}
field(Text006; Text006)
{
ApplicationArea = Service;
ShowCaption = false;
Visible = false;
}
#pragma warning disable AA0100
field("TotalServLineLCY[6].""Unit Cost (LCY)"""; TotalServLineLCY[6]."Unit Cost (LCY)")
#pragma warning restore AA0100
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Cost (LCY)';
Editable = false;
ToolTip = 'Specifies the total cost of the service in LCY.';
}
field(Control85; Text006)
{
ApplicationArea = Service;
ShowCaption = false;
Visible = false;
}
field(Placeholder2; Text006)
{
ApplicationArea = Service;
ShowCaption = false;
Visible = false;
}
}
group("Costs && G/L Accounts")
{
Caption = 'Costs && G/L Accounts';
field("TotalServLine[7].Quantity"; TotalServLine[7].Quantity)
{
ApplicationArea = Service;
Caption = 'Quantity';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the quantity of all G/L account entries, costs, items and/or resource hours in the service order.';
}
field(Amount_Costs; TotalServLine[7]."Line Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text002, false);
Editable = false;
}
field("Inv. Discount Amount_Costs"; TotalServLine[7]."Inv. Discount Amount")
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Inv. Discount Amount';
Editable = false;
ToolTip = 'Specifies the invoice discount amount for the entire service document.';
}
field("TotalAmount1[7]"; TotalAmount1[7])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text001, false);
Editable = false;
ShowCaption = false;
trigger OnValidate()
begin
UpdateTotalAmount(2);
end;
}
field("VAT Amount_Costs"; VATAmount[7])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Editable = false;
ShowCaption = false;
}
field("Total Incl. VAT_Costs"; TotalAmount2[7])
{
ApplicationArea = Service;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
CaptionClass = GetCaptionClass(Text001, true);
Editable = false;
}
field("Sales (LCY)_Costs"; TotalServLineLCY[7].Amount)
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Amount (LCY)';
Editable = false;
ToolTip = 'Specifies the amount of the ledger entry, in the local currency.';
}
field("ProfitLCY[7]"; ProfitLCY[7])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the profit related to the service document, in local currency.';
}
field("AdjProfitLCY[7]"; AdjProfitLCY[7])
{
ApplicationArea = Service;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Profit (LCY)';
Editable = false;
ToolTip = 'Specifies the profit related to the service document, in local currency.';
}
field("ProfitPct[7]"; ProfitPct[7])
{
ApplicationArea = Service;
AutoFormatType = 0;
Caption = 'Profit %';
DecimalPlaces = 1 : 1;
Editable = false;
ToolTip = 'Specifies the amount of profit as percentage of the invoiced amount.';
}
field(Placeholder3; Text006)
{
ApplicationArea = Service;
ShowCaption = false;
Visible = false;
}
#pragma warning disable AA0100
field("TotalServLineLCY[7].""Unit Cost (LCY)"""; TotalServLineLCY[7]."Unit Cost (LCY)")
#pragma warning restore AA0100
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Cost (LCY)';
Editable = false;
ToolTip = 'Specifies the total cost of the service in LCY.';
}
field(Placeholder5; Text006)
{
ApplicationArea = Service;
ShowCaption = false;
Visible = false;
}
field(Placeholder7; Text006)
{
ApplicationArea = Service;
ShowCaption = false;
Visible = false;
}
}
}
}
group(Customer)
{
Caption = 'Customer';
#pragma warning disable AA0100
field("Cust.""Balance (LCY)"""; Cust."Balance (LCY)")
#pragma warning restore AA0100
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Balance (LCY)';
Editable = false;
ToolTip = 'Specifies the balance in LCY on the customer''s account.';
}
field("Credit Limit (LCY)"; Cust."Credit Limit (LCY)")
{
ApplicationArea = Service;
AutoFormatType = 1;
Caption = 'Credit Limit (LCY)';
Editable = false;
ToolTip = 'Specifies the credit limit of the customer on the service document. The value 0 represents unlimited credit.';
}
field(CreditLimitLCYExpendedPct; CreditLimitLCYExpendedPct)
{
ApplicationArea = Service;
AutoFormatType = 0;
Caption = 'Expended % of Credit Limit (LCY)';
ExtendedDatatype = Ratio;
ToolTip = 'Specifies the expended percentage of the credit limit in (LCY).';
}
}
}
}
actions
{
}
trigger OnAfterGetRecord()
var
ServLine: Record "Service Line";
TempServLine: Record "Service Line" temporary;
IsHandled: Boolean;
begin
CurrPage.Caption(StrSubstNo(Text000, Rec."Document Type"));
if PrevNo = Rec."No." then begin
GetVATSpecification();
exit;
end;
PrevNo := Rec."No.";
Rec.FilterGroup(2);
Rec.SetRange("No.", PrevNo);
Rec.FilterGroup(0);
Clear(ServLine);
Clear(TotalServLine);
Clear(TotalServLineLCY);
Clear(ServAmtsMgt);
for i := 1 to 7 do
if i in [1, 5, 6, 7] then begin
TempServLine.DeleteAll();
Clear(TempServLine);
ServAmtsMgt.GetServiceLines(Rec, TempServLine, i - 1);
ServAmtsMgt.SumServiceLinesTemp(
Rec, TempServLine, i - 1, TotalServLine[i], TotalServLineLCY[i],
VATAmount[i], VATAmountText[i], ProfitLCY[i], ProfitPct[i], TotalAdjCostLCY[i]);
if TotalServLineLCY[i].Amount = 0 then
ProfitPct[i] := 0
else
ProfitPct[i] := Round(100 * ProfitLCY[i] / TotalServLineLCY[i].Amount, 0.1);
AdjProfitLCY[i] := TotalServLineLCY[i].Amount - TotalAdjCostLCY[i];
if TotalServLineLCY[i].Amount <> 0 then
AdjProfitPct[i] := Round(AdjProfitLCY[i] / TotalServLineLCY[i].Amount * 100, 0.1);
IsHandled := false;
OnAfterGetRecordAfterCalcProfit(Rec, IsHandled);
if not IsHandled then
if Rec."Prices Including VAT" then begin
TotalAmount2[i] := TotalServLine[i].Amount;
TotalAmount1[i] := TotalAmount2[i] + VATAmount[i];
TotalServLine[i]."Line Amount" :=
TotalAmount1[i] + TotalServLine[i]."Inv. Discount Amount" + TotalServLine[i]."Pmt. Discount Amount";
end else begin
TotalAmount1[i] := TotalServLine[i].Amount;
TotalAmount2[i] := TotalServLine[i]."Amount Including VAT";
end;
end;
if Cust.Get(Rec."Bill-to Customer No.") then
Cust.CalcFields("Balance (LCY)")
else
Clear(Cust);
if Cust."Credit Limit (LCY)" = 0 then
CreditLimitLCYExpendedPct := 0
else
if Cust."Balance (LCY)" / Cust."Credit Limit (LCY)" < 0 then
CreditLimitLCYExpendedPct := 0
else
if Cust."Balance (LCY)" / Cust."Credit Limit (LCY)" > 1 then
CreditLimitLCYExpendedPct := 10000
else
CreditLimitLCYExpendedPct := Round(Cust."Balance (LCY)" / Cust."Credit Limit (LCY)" * 10000, 1);
TempServLine.DeleteAll();
Clear(TempServLine);
ServAmtsMgt.GetServiceLines(Rec, TempServLine, 0);
ServLine.CalcVATAmountLines(0, Rec, TempServLine, TempVATAmountLine, false);
TempVATAmountLine.ModifyAll(Modified, false);
SetVATSpecification();
end;
trigger OnOpenPage()
var
ServiceCalcDiscount: Codeunit "Service-Calc. Discount";
begin
#if not CLEAN27
if not Rec.SkipStatisticsPreparation() then
#endif
ServiceCalcDiscount.CalculateIncDiscForHeader(Rec);
#if not CLEAN27
Rec.ResetSkipStatisticsPreparationFlag();
#endif
SalesSetup.Get();
AllowInvDisc := not (SalesSetup."Calc. Inv. Discount" and CustInvDiscRecExists(Rec."Invoice Disc. Code"));
AllowVATDifference := SalesSetup."Allow VAT Difference" and (Rec."Document Type" <> Rec."Document Type"::Quote);
CurrPage.Editable := AllowVATDifference or AllowInvDisc;
SetVATSpecification();
CurrPage.SubForm.PAGE.SetParentControl := PAGE::"Service Statistics";
end;
trigger OnQueryClosePage(CloseAction: Action): Boolean
begin
GetVATSpecification();
if TempVATAmountLine.GetAnyLineModified() then
UpdateVATOnServLines();
exit(true);
end;
var
TotalServLine: array[7] of Record "Service Line";
TotalServLineLCY: array[7] of Record "Service Line";
Cust: Record Customer;
TempVATAmountLine: Record "VAT Amount Line" temporary;
SalesSetup: Record "Sales & Receivables Setup";
ServAmtsMgt: Codeunit "Serv-Amounts Mgt.";
TotalAmount1: array[7] of Decimal;
TotalAmount2: array[7] of Decimal;
AdjProfitPct: array[7] of Decimal;
AdjProfitLCY: array[7] of Decimal;
TotalAdjCostLCY: array[7] of Decimal;
VATAmount: array[7] of Decimal;
VATAmountText: array[7] of Text[30];
ProfitLCY: array[7] of Decimal;
ProfitPct: array[7] of Decimal;
CreditLimitLCYExpendedPct: Decimal;
i: Integer;
PrevNo: Code[20];
AllowInvDisc: Boolean;
AllowVATDifference: Boolean;
#pragma warning disable AA0074
#pragma warning disable AA0470
Text000: Label 'Service %1 Statistics';
#pragma warning restore AA0470
Text001: Label 'Total';
Text002: Label 'Amount';
#pragma warning disable AA0470
Text003: Label '%1 must not be 0.';
Text004: Label '%1 must not be greater than %2.';
Text005: Label 'You cannot change the invoice discount because there is a %1 record for %2 %3.', Comment = 'You cannot change the invoice discount because there is a Cust. Invoice Disc. record for Invoice Disc. Code 10000.';
#pragma warning restore AA0470
Text006: Label 'Placeholder';
#pragma warning restore AA0074
local procedure UpdateHeaderInfo(IndexNo: Integer; var VATAmountLine: Record "VAT Amount Line")
var
CurrExchRate: Record "Currency Exchange Rate";
UseDate: Date;
begin
TotalServLine[IndexNo]."Inv. Discount Amount" := VATAmountLine.GetTotalInvDiscAmount();
TotalAmount1[IndexNo] :=
TotalServLine[IndexNo]."Line Amount" - TotalServLine[IndexNo]."Inv. Discount Amount" -
TotalServLine[IndexNo]."Pmt. Discount Amount";
VATAmount[IndexNo] := VATAmountLine.GetTotalVATAmount();
if Rec."Prices Including VAT" then begin
TotalAmount1[IndexNo] := VATAmountLine.GetTotalAmountInclVAT();
TotalAmount2[IndexNo] := TotalAmount1[IndexNo] - VATAmount[IndexNo];
TotalServLine[IndexNo]."Line Amount" :=
TotalAmount1[IndexNo] + TotalServLine[IndexNo]."Inv. Discount Amount" +
TotalServLine[IndexNo]."Pmt. Discount Amount";
end else
TotalAmount2[IndexNo] := TotalAmount1[IndexNo] + VATAmount[IndexNo];
OnUpdateHeaderInfoOnAfterCalcTotalAmount(Rec);
if Rec."Prices Including VAT" then
TotalServLineLCY[IndexNo].Amount := TotalAmount2[IndexNo]
else
TotalServLineLCY[IndexNo].Amount := TotalAmount1[IndexNo];
if Rec."Currency Code" <> '' then
if (Rec."Document Type" = Rec."Document Type"::Quote) and
(Rec."Posting Date" = 0D)
then
UseDate := WorkDate()
else
UseDate := Rec."Posting Date";
TotalServLineLCY[IndexNo].Amount :=
CurrExchRate.ExchangeAmtFCYToLCY(
UseDate, Rec."Currency Code", TotalServLineLCY[IndexNo].Amount, Rec."Currency Factor");
ProfitLCY[IndexNo] := TotalServLineLCY[IndexNo].Amount - TotalServLineLCY[IndexNo]."Unit Cost (LCY)";
if TotalServLineLCY[IndexNo].Amount = 0 then
ProfitPct[IndexNo] := 0
else
ProfitPct[IndexNo] := Round(100 * ProfitLCY[IndexNo] / TotalServLineLCY[IndexNo].Amount, 0.1);
AdjProfitLCY[IndexNo] := TotalServLineLCY[IndexNo].Amount - TotalAdjCostLCY[IndexNo];
if TotalServLineLCY[IndexNo].Amount = 0 then
AdjProfitPct[IndexNo] := 0
else
AdjProfitPct[IndexNo] := Round(100 * AdjProfitLCY[IndexNo] / TotalServLineLCY[IndexNo].Amount, 0.1);
OnAfterUpdateHeaderInfo(TotalServLineLCY, IndexNo);
end;
local procedure GetVATSpecification()
begin
CurrPage.SubForm.PAGE.GetTempVATAmountLine(TempVATAmountLine);
UpdateHeaderInfo(1, TempVATAmountLine);
end;
local procedure SetVATSpecification()
begin
CurrPage.SubForm.PAGE.SetSourceHeader(Rec);
CurrPage.SubForm.PAGE.SetTempVATAmountLine(TempVATAmountLine);
CurrPage.SubForm.PAGE.InitGlobals(
Rec."Currency Code", AllowVATDifference, AllowVATDifference,
Rec."Prices Including VAT", AllowInvDisc, Rec."VAT Base Discount %");
end;
local procedure UpdateTotalAmount(IndexNo: Integer)
var
SaveTotalAmount: Decimal;
begin
CheckAllowInvDisc();
if Rec."Prices Including VAT" then begin
SaveTotalAmount := TotalAmount1[IndexNo];
UpdateInvDiscAmount();
TotalAmount1[IndexNo] := SaveTotalAmount;
end;
TotalServLine[IndexNo]."Inv. Discount Amount" := TotalServLine[IndexNo]."Line Amount" - TotalAmount1[IndexNo];
UpdateInvDiscAmount();
end;
local procedure UpdateInvDiscAmount()
var
InvDiscBaseAmount: Decimal;
begin
CheckAllowInvDisc();
InvDiscBaseAmount := TempVATAmountLine.GetTotalInvDiscBaseAmount(false, Rec."Currency Code");
if InvDiscBaseAmount = 0 then
Error(Text003, TempVATAmountLine.FieldCaption("Inv. Disc. Base Amount"));
if TotalServLine[1]."Inv. Discount Amount" / InvDiscBaseAmount > 1 then
Error(
Text004,
TotalServLine[1].FieldCaption("Inv. Discount Amount"),
TempVATAmountLine.FieldCaption("Inv. Disc. Base Amount"));
TempVATAmountLine.SetInvoiceDiscountAmount(
TotalServLine[1]."Inv. Discount Amount", Rec."Currency Code", Rec."Prices Including VAT", Rec."VAT Base Discount %");
UpdateHeaderInfo(1, TempVATAmountLine);
CurrPage.SubForm.PAGE.SetTempVATAmountLine(TempVATAmountLine);
Rec."Invoice Discount Calculation" := Rec."Invoice Discount Calculation"::Amount;
Rec."Invoice Discount Value" := TotalServLine[1]."Inv. Discount Amount";
Rec.Modify();
UpdateVATOnServLines();
end;
local procedure GetCaptionClass(FieldCaption: Text[100]; ReverseCaption: Boolean): Text[80]
begin
if Rec."Prices Including VAT" xor ReverseCaption then
exit('2,1,' + FieldCaption);
exit('2,0,' + FieldCaption);
end;
local procedure UpdateVATOnServLines()
var
ServLine: Record "Service Line";
begin
GetVATSpecification();
if TempVATAmountLine.GetAnyLineModified() then begin
ServLine.UpdateVATOnLines(0, Rec, ServLine, TempVATAmountLine);
ServLine.UpdateVATOnLines(1, Rec, ServLine, TempVATAmountLine);
end;
PrevNo := '';
end;
local procedure CustInvDiscRecExists(InvDiscCode: Code[20]): Boolean
var
CustInvDisc: Record "Cust. Invoice Disc.";
begin
CustInvDisc.SetRange(Code, InvDiscCode);
exit(CustInvDisc.FindFirst())
end;
local procedure CheckAllowInvDisc()
var
CustInvDisc: Record "Cust. Invoice Disc.";
begin
if not AllowInvDisc then
Error(
Text005,
CustInvDisc.TableCaption(), Rec.FieldCaption("Invoice Disc. Code"), Rec."Invoice Disc. Code");
end;
[IntegrationEvent(true, false)]
local procedure OnAfterUpdateHeaderInfo(var TotalServLineLCY: array[7] of Record "Service Line"; var IndexNo: Integer)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnAfterGetRecordAfterCalcProfit(var ServiceHeader: Record "Service Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnUpdateHeaderInfoOnAfterCalcTotalAmount(var ServiceHeader: Record "Service Header")
begin
end;
}