Skip to content

Commit 771ab63

Browse files
640811 initial commit
1 parent 8894ebb commit 771ab63

12 files changed

Lines changed: 202 additions & 10 deletions

File tree

src/Layers/APAC/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6316,7 +6316,7 @@ codeunit 90 "Purch.-Post"
63166316
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
63176317
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
63186318
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6319-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6319+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
63206320
if ItemLedgerEntry.FindFirst() then
63216321
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
63226322
end;

src/Layers/BE/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6125,7 +6125,7 @@ codeunit 90 "Purch.-Post"
61256125
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
61266126
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
61276127
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6128-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6128+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
61296129
if ItemLedgerEntry.FindFirst() then
61306130
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
61316131
end;

src/Layers/CH/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6086,7 +6086,7 @@ codeunit 90 "Purch.-Post"
60866086
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
60876087
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
60886088
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6089-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6089+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
60906090
if ItemLedgerEntry.FindFirst() then
60916091
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
60926092
end;

src/Layers/ES/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6204,7 +6204,7 @@ codeunit 90 "Purch.-Post"
62046204
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
62056205
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
62066206
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6207-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6207+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
62086208
if ItemLedgerEntry.FindFirst() then
62096209
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
62106210
end;

src/Layers/FI/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6083,7 +6083,7 @@ codeunit 90 "Purch.-Post"
60836083
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
60846084
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
60856085
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6086-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6086+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
60876087
if ItemLedgerEntry.FindFirst() then
60886088
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
60896089
end;

src/Layers/GB/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6110,7 +6110,7 @@ codeunit 90 "Purch.-Post"
61106110
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
61116111
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
61126112
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6113-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6113+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
61146114
if ItemLedgerEntry.FindFirst() then
61156115
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
61166116
end;

src/Layers/IT/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6273,7 +6273,7 @@ codeunit 90 "Purch.-Post"
62736273
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
62746274
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
62756275
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6276-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6276+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
62776277
if ItemLedgerEntry.FindFirst() then
62786278
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
62796279
end;

src/Layers/NA/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6285,7 +6285,7 @@ codeunit 90 "Purch.-Post"
62856285
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
62866286
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
62876287
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6288-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6288+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
62896289
if ItemLedgerEntry.FindFirst() then
62906290
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
62916291
end;

src/Layers/RU/BaseApp/Purchases/Posting/PurchPost.Codeunit.al

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6262,7 +6262,7 @@ codeunit 90 "Purch.-Post"
62626262
ItemLedgerEntry.SetRange("Document Line No.", ItemLedgerEntry."Document Line No.");
62636263
ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::"Negative Adjmt.");
62646264
ItemLedgerEntry.SetRange("Item No.", ItemLedgerEntry."Item No.");
6265-
ItemLedgerEntry.SetRange("Invoiced Quantity", 0);
6265+
ItemLedgerEntry.SetRange("Completely Invoiced", false);
62666266
if ItemLedgerEntry.FindFirst() then
62676267
ItemJournalLine."Item Shpt. Entry No." := ItemLedgerEntry."Entry No."
62686268
end;

src/Layers/RU/Tests/Job/JobConsumptionPurchase.Codeunit.al

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2778,6 +2778,66 @@ codeunit 136302 "Job Consumption Purchase"
27782778
VerifyItemLedgEntriesInvoiced(Item."No.", PurchaseLine.Amount);
27792779
end;
27802780

2781+
procedure PartialInvoicingNonInvItemWithJobAppliesNegAdjmtToCorrectILE()
2782+
var
2783+
Item: Record Item;
2784+
Vendor: Record Vendor;
2785+
JobTask: Record "Job Task";
2786+
PurchaseHeader: Record "Purchase Header";
2787+
PurchaseLine: Record "Purchase Line";
2788+
PurchaseILE: Record "Item Ledger Entry";
2789+
NegAdjmtILE: Record "Item Ledger Entry";
2790+
ReceiptNo: Code[20];
2791+
UnitCost: Decimal;
2792+
FirstQtyToInvoice: Decimal;
2793+
SecondQtyToInvoice: Decimal;
2794+
begin
2795+
// [FEATURE] [Partial Posting] [Get Receipt Lines] [Non-Inventory]
2796+
// [SCENARIO 640811] Partial invoicing of a non-inventory item with a project applies the project consumption
2797+
// [SCENARIO 640811] "Negative Adjmt." value entry to the correct Item Ledger Entry.
2798+
Initialize();
2799+
UnitCost := LibraryRandom.RandDecInRange(100, 200, 2);
2800+
FirstQtyToInvoice := 0.2;
2801+
SecondQtyToInvoice := 0.3;
2802+
2803+
// [GIVEN] A non-inventory item and a project with a project task.
2804+
LibraryInventory.CreateNonInventoryTypeItem(Item);
2805+
CreateJobWithJobTask(JobTask);
2806+
2807+
// [GIVEN] A purchase order for the non-inventory item, Quantity = 1, with Project No. and Project Task No.
2808+
LibraryPurchase.CreateVendor(Vendor);
2809+
CreatePurchaseHeader(PurchaseHeader."Document Type"::Order, Vendor."No.", PurchaseHeader);
2810+
LibraryPurchase.CreatePurchaseLine(PurchaseLine, PurchaseHeader, PurchaseLine.Type::Item, Item."No.", 1);
2811+
PurchaseLine.Validate("Direct Unit Cost", UnitCost);
2812+
PurchaseLine.Validate("Job No.", JobTask."Job No.");
2813+
PurchaseLine.Validate("Job Task No.", JobTask."Job Task No.");
2814+
PurchaseLine.Modify(true);
2815+
2816+
// [GIVEN] The purchase receipt is posted for the full quantity.
2817+
// [GIVEN] Two Item Ledger Entries are created: a "Purchase" entry and a "Negative Adjmt." entry for the project.
2818+
ReceiptNo := LibraryPurchase.PostPurchaseDocument(PurchaseHeader, true, false);
2819+
2820+
// [GIVEN] A first partial invoice for Quantity = 0.2 is created through "Get Receipt Lines" and posted.
2821+
CreateAndPostPurchInvoiceFromReceipt(Vendor."No.", ReceiptNo, FirstQtyToInvoice);
2822+
2823+
// [WHEN] A second partial invoice for Quantity = 0.3 is created through "Get Receipt Lines" and posted.
2824+
CreateAndPostPurchInvoiceFromReceipt(Vendor."No.", ReceiptNo, SecondQtyToInvoice);
2825+
2826+
// [THEN] The "Purchase" Item Ledger Entry has Invoiced Quantity = 0.5, matching the invoiced receipt quantity.
2827+
FindItemLedgEntry(
2828+
PurchaseILE, Item."No.", PurchaseILE."Entry Type"::Purchase, PurchaseILE."Document Type"::"Purchase Receipt", ReceiptNo);
2829+
PurchaseILE.TestField("Invoiced Quantity", FirstQtyToInvoice + SecondQtyToInvoice);
2830+
2831+
// [THEN] No "Negative Adjmt." value entry is linked to the "Purchase" Item Ledger Entry.
2832+
VerifyNoNegativeAdjmtValueEntryOnILE(PurchaseILE."Entry No.");
2833+
2834+
// [THEN] The "Negative Adjmt." Item Ledger Entry has Invoiced Quantity = -0.5.
2835+
FindItemLedgEntry(
2836+
NegAdjmtILE, Item."No.", NegAdjmtILE."Entry Type"::"Negative Adjmt.",
2837+
NegAdjmtILE."Document Type"::"Purchase Receipt", ReceiptNo);
2838+
NegAdjmtILE.TestField("Invoiced Quantity", -(FirstQtyToInvoice + SecondQtyToInvoice));
2839+
end;
2840+
27812841
[Test]
27822842
procedure UndoPurchaseReceiptWithNegativeQuantityAndJob()
27832843
var
@@ -5500,6 +5560,42 @@ codeunit 136302 "Job Consumption Purchase"
55005560
PurchaseLine.ShowItemChargeAssgnt();
55015561
end;
55025562

5563+
local procedure CreateAndPostPurchInvoiceFromReceipt(VendorNo: Code[20]; ReceiptDocumentNo: Code[20]; QtyToInvoice: Decimal)
5564+
var
5565+
PurchaseHeader: Record "Purchase Header";
5566+
PurchaseLine: Record "Purchase Line";
5567+
PurchRcptLine: Record "Purch. Rcpt. Line";
5568+
PurchGetReceipt: Codeunit "Purch.-Get Receipt";
5569+
begin
5570+
// Create a purchase invoice, pull in the posted receipt lines using "Get Receipt Lines" and
5571+
// reduce the line quantity so that only part of the receipt is invoiced, then post the invoice.
5572+
LibraryPurchase.CreatePurchHeader(PurchaseHeader, PurchaseHeader."Document Type"::Invoice, VendorNo);
5573+
PurchaseHeader.Validate("Vendor Invoice No.", LibraryUtility.GenerateGUID());
5574+
PurchaseHeader.Modify(true);
5575+
5576+
PurchRcptLine.SetRange("Document No.", ReceiptDocumentNo);
5577+
PurchGetReceipt.SetPurchHeader(PurchaseHeader);
5578+
PurchGetReceipt.CreateInvLines(PurchRcptLine);
5579+
5580+
PurchaseLine.SetRange("Document Type", PurchaseHeader."Document Type");
5581+
PurchaseLine.SetRange("Document No.", PurchaseHeader."No.");
5582+
PurchaseLine.SetRange(Type, PurchaseLine.Type::Item);
5583+
PurchaseLine.FindFirst();
5584+
PurchaseLine.Validate(Quantity, QtyToInvoice);
5585+
PurchaseLine.Modify(true);
5586+
5587+
LibraryPurchase.PostPurchaseDocument(PurchaseHeader, false, true);
5588+
end;
5589+
5590+
local procedure VerifyNoNegativeAdjmtValueEntryOnILE(ItemLedgerEntryNo: Integer)
5591+
var
5592+
ValueEntry: Record "Value Entry";
5593+
begin
5594+
ValueEntry.SetRange("Item Ledger Entry No.", ItemLedgerEntryNo);
5595+
ValueEntry.SetRange("Item Ledger Entry Type", ValueEntry."Item Ledger Entry Type"::"Negative Adjmt.");
5596+
Assert.RecordIsEmpty(ValueEntry);
5597+
end;
5598+
55035599
local procedure AttachJobToPurchaseDocument(JobTask: Record "Job Task"; PurchaseHeader: Record "Purchase Header"; JobPlanningLineNo: Integer)
55045600
var
55055601
PurchaseLine: Record "Purchase Line";

0 commit comments

Comments
 (0)