mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 06:36:55 +01:00
data-modeling is a Microsoft-owned review domain consumed by microsoft/skills/review/al-data-modeling-review.md, and docs/contributing.md does not allow Community as a staging layer for such domains. Move the article and its .good.al/.bad.al samples to microsoft/knowledge/data-modeling/. Content is unchanged; the slug-based evaluation entry stays as is.
52 lines
2.4 KiB
AL
52 lines
2.4 KiB
AL
// Demonstration only; independently authored, not copied from BaseApp.
|
|
codeunit 50640 "Sales Doc. VAT Basis Good"
|
|
{
|
|
procedure GetNetAndGrossTotals(SalesHeader: Record "Sales Header"; var NetTotal: Decimal; var GrossTotal: Decimal)
|
|
var
|
|
SalesLine: Record "Sales Line";
|
|
begin
|
|
SalesLine.SetRange("Document Type", SalesHeader."Document Type");
|
|
SalesLine.SetRange("Document No.", SalesHeader."No.");
|
|
// Amount is always net and "Amount Including VAT" always gross, after line and
|
|
// invoice discounts, whatever the header's "Prices Including VAT" says.
|
|
SalesLine.CalcSums(Amount, "Amount Including VAT");
|
|
NetTotal := SalesLine.Amount;
|
|
GrossTotal := SalesLine."Amount Including VAT";
|
|
end;
|
|
|
|
procedure GetOutstandingNetAmount(SalesLine: Record "Sales Line"): Decimal
|
|
var
|
|
SalesHeader: Record "Sales Header";
|
|
Currency: Record Currency;
|
|
begin
|
|
if SalesLine.Quantity = 0 then
|
|
exit(0);
|
|
SalesHeader.Get(SalesLine."Document Type", SalesLine."Document No.");
|
|
Currency.Initialize(SalesHeader."Currency Code");
|
|
// Amount is net after line and invoice discounts on every document, so the
|
|
// uninvoiced share needs no VAT conversion.
|
|
exit(Round(
|
|
SalesLine.Amount * (SalesLine.Quantity - SalesLine."Quantity Invoiced") / SalesLine.Quantity,
|
|
Currency."Amount Rounding Precision"));
|
|
end;
|
|
|
|
procedure SetUnitPriceFromNetSourcePrice(var SalesLine: Record "Sales Line"; NetSourcePrice: Decimal)
|
|
var
|
|
SalesHeader: Record "Sales Header";
|
|
Currency: Record Currency;
|
|
UnitPrice: Decimal;
|
|
begin
|
|
SalesHeader.Get(SalesLine."Document Type", SalesLine."Document No.");
|
|
// Scope of the conversion below: Normal VAT only; Full VAT and Sales Tax need their own handling.
|
|
SalesLine.TestField("VAT Calculation Type", SalesLine."VAT Calculation Type"::"Normal VAT");
|
|
Currency.Initialize(SalesHeader."Currency Code");
|
|
|
|
UnitPrice := NetSourcePrice;
|
|
// "Unit Price" is gross on a Prices Including VAT document: convert the net source price into that basis.
|
|
if SalesHeader."Prices Including VAT" then
|
|
UnitPrice := Round(NetSourcePrice * (1 + SalesLine."VAT %" / 100), Currency."Unit-Amount Rounding Precision");
|
|
|
|
SalesLine.Validate("Unit Price", UnitPrice);
|
|
SalesLine.Modify(true);
|
|
end;
|
|
}
|