Bulk close rental orders
Documents
Design Spec: Bulk Close Rental Orders
Design Spec: Bulk Close Rental Orders
Ticket: TC-5834 Klant: Van Wijnen Datum: 2026-03-25 Bedrijf voor testen: 0910
Samenvatting
Een Processing Only report waarmee gebruikers inhuurorders in bulk kunnen afsluiten. Het rapport controleert automatisch of elke order aan alle voorwaarden voldoet en sluit alleen de orders af die volledig gereed zijn.
Achtergrond
De materieeldienst controleert nu handmatig via pagina "Huidige stand inhuur gefactureerd tot en met" (11020593) welke inhuurorders afgesloten kunnen worden. Dit kost veel tijd. De klant wil dit in bulk kunnen doen via een rapport.
Belangrijk: de exitorder-check en de datumcheck zijn twee onafhankelijke voorwaarden. Het is mogelijk dat einddatum en gefactureerd t/m gelijk zijn, maar het materieel nog fysiek bij de klant staat (exitorder ontbreekt). "Is het gefactureerd?" is iets anders dan "is het materieel daadwerkelijk teruggebracht?"
8-weken werkwijze: de klant kijkt momenteel naar exitdatums ouder dan 8 weken. Dit is hun handmatige werkwijze, geen businessregel die we in code afdwingen.
Object
| Property | Value |
|---|---|
| Type | Report (Processing Only) |
| Name | Bulk Close Rental Orders |
| ID | Uit beschikbare range (50000-99999) |
Geen nieuwe table extensions, page extensions of codeunits nodig.
RequestPage
Standaard BC filters via het dataitem op Purchase Header. De gebruiker kan filteren op:
- Nr.
- Leverancier (Buy-from Vendor No.)
- Orderdatum
Geen custom request page opties nodig.
Bevestigingsdialoog
Voordat de verwerking start, toon een Confirm:
"U staat op het punt inhuurorders in bulk af te sluiten. Doorgaan?"
Verwerkingslogica
DataItem
Purchase Header
Filters: Document Type = Order, No. Series = 'INH-ORD', Status = Released
Per order (OnAfterGetRecord)
- Haal alle Purchase Lines op (waar Type > 0 EN Plant Type <> '' EN Plant No. <> '')
- Per regel, voer vier checks uit:
| # | Check | Veld | Tabel | Bij falen |
|---|---|---|---|---|
| 1 | Einddatum is gevuld | Expected Enddate Rent (11012443) | Purchase Line | Skip order, log reden |
| 2 | Gefactureerd t/m is gevuld | Ext. Rented Invoiced to (490) | Plant Number | Skip order, log reden |
| 3 | Einddatum = Gefactureerd t/m | Vergelijking van bovenstaande | - | Skip order, log reden |
| 4 | Exitorder aanwezig | Removed = true | Plant Rent Entry | Skip order, log reden |
- Alle regels OK → probeer te sluiten:
- Wrap
Codeunit 415 "Release Purchase Document".Close(PurchHeader)in error handling - Bij succes:
Commit()zodat deze order niet teruggerold wordt bij een latere fout - Bij error (bijv. open approval requests op ontvangsten): log als overgeslagen met foutmelding
- Wrap
- Log resultaat in tijdelijke tabel
Plant Rent Entry lookup (check 4)
Per Purchase Line:
- Zoek Plant Rent Entry waar:
Plant Type= Purchase Line."Plant Type"Plant No.= Purchase Line."Plant No."Vendor No.= Purchase Header."Buy-from Vendor No."Removed= true
- Minimaal één record gevonden → check OK
Let op: zonder de Vendor No. filter zou je een exitorder van een vorige huurperiode bij een andere verhuurder kunnen matchen. De combinatie Plant Type + Plant No. + Vendor No. + Removed koppelt de check aan de juiste huurrelatie.
Plant Number lookup (check 2 en 3)
Per Purchase Line:
Plant Number.Get(Purchase Line."Plant Type", Purchase Line."Plant No.")- Lees
Plant Number."Ext. Rented Invoiced to"
Output
Processing Only, geen printbare layout.
Na afloop een Message met samenvatting:
"X inhuurorders afgesloten, Y inhuurorders overgeslagen."
Voor overgeslagen orders: een tijdelijke tabel bijhouden met:
- Ordernummer
- Reden van overslaan (welke check faalde, op welke regel)
Deze lijst tonen via een pagina na afloop, zodat de gebruiker precies weet welke orders niet voldoen en waarom.
Afhankelijkheden
| Object | Type | Gebruik |
|---|---|---|
| Purchase Header (38) | Table | DataItem, filters |
| Purchase Line (39) | Table | Regelvalidatie |
| Plant Number (11012552) | Table | Ext. Rented Invoiced to ophalen |
| Plant Rent Entry (11012535) | Table | Exitorder check |
| Release Purchase Document (415) | Codeunit | Close procedure aanroepen |
Teststappen
- Open bedrijf 0910
- Controleer dat er inhuurorders bestaan (INH-ORD, status Vrijgegeven)
- Draai het rapport zonder filters
- Verifieer: orders die aan alle voorwaarden voldoen zijn afgesloten (status = Closed)
- Verifieer: orders die niet voldoen zijn overgeslagen met correcte reden
- Draai het rapport opnieuw, verifieer dat al gesloten orders niet opnieuw verwerkt worden (CU 415 checkt dit al)
Testresultaten:
| # | Stap | Verwacht | Resultaat |
|---|---|---|---|
| 1 | Rapport draaien met geldige orders | Orders afgesloten | |
| 2 | Order zonder exitorder | Overgeslagen met reden | |
| 3 | Order waar einddatum != gefactureerd t/m | Overgeslagen met reden | |
| 4 | Order waar einddatum niet gevuld | Overgeslagen met reden | |
| 5 | Reeds gesloten order | Niet meegenomen (DataItem filter Status = Released) | |
| 6 | Order met open approval requests | Overgeslagen met foutmelding | |
| 7 | Orderregel zonder Plant Type/No. | Regel wordt overgeslagen in validatie |
Bulk Close Rental Orders — Implementation Plan
Bulk Close Rental Orders — Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: A processing-only report that bulk-closes rental purchase orders (INH-ORD) after validating exit order, end date, and invoiced-to date per line.
Architecture: Single report object with Purchase Header as DataItem, filtered on INH-ORD + Released. Validation logic inline in the report. Uses CU 415 Close for the actual close. Skipped orders are collected in a temp record and shown via a page after processing.
Tech Stack: AL (Business Central 25.x), 4PS Construct NL base app
Spec: _DOCS/Wijn/TC-5834/2026-03-25-bulk-close-rental-orders-design.md
File Structure
| File | Responsibility |
|---|---|
src/report/Rep99289.BulkCloseRentalOrders.al |
Report: DataItem, validation, close logic, output |
src/page/Pag99067.BulkCloseRentalOrderLog.al |
Temp page: shows skipped orders with reasons after processing |
Translations/Van Wijnen Customisations.nl-NL.xlf |
Dutch translations for all captions and labels |
Task 1: Create the report skeleton
Files:
Create:
src/report/Rep99289.BulkCloseRentalOrders.alStep 1: Create report file with DataItem and RequestPage
report 99289 "Bulk Close Rental Orders"
{
Caption = 'Bulk Close Rental Orders';
UsageCategory = Tasks;
ApplicationArea = All;
ProcessingOnly = true;
dataset
{
dataitem(PurchaseHeader; "Purchase Header")
{
DataItemTableView = where("Document Type" = const(Order), Status = const(Released));
RequestFilterFields = "No.", "Buy-from Vendor No.", "Order Date";
trigger OnPreDataItem()
begin
PurchaseHeader.SetRange("No. Series", 'INH-ORD');
if not Confirm(ConfirmQst) then
CurrReport.Quit();
ClosedCount := 0;
SkippedCount := 0;
end;
trigger OnAfterGetRecord()
begin
if CanCloseOrder(PurchaseHeader) then
TryCloseOrder(PurchaseHeader);
// SkippedCount is incremented inside LogSkippedOrder
end;
}
}
trigger OnPostReport()
begin
Message(SummaryMsg, ClosedCount, SkippedCount);
ShowSkippedOrders();
end;
var
ConfirmQst: Label 'You are about to bulk close rental orders. Continue?';
SummaryMsg: Label '%1 rental orders closed, %2 rental orders skipped.';
ClosedCount: Integer;
SkippedCount: Integer;
}
- Step 2: Verify it compiles (skeleton only, procedures stubbed)
Add empty procedure stubs so it compiles:
local procedure CanCloseOrder(var PurchHeader: Record "Purchase Header"): Boolean
begin
exit(false);
end;
local procedure TryCloseOrder(var PurchHeader: Record "Purchase Header")
begin
end;
local procedure ShowSkippedOrders()
begin
end;
- Step 3: Commit
git add src/report/Rep99289.BulkCloseRentalOrders.al
git commit -m "feat(TC-5834): add report skeleton for bulk close rental orders"
Task 2: Implement validation logic (CanCloseOrder)
Files:
Modify:
src/report/Rep99289.BulkCloseRentalOrders.alStep 1: Implement CanCloseOrder
Replace the stub with the full validation. This loops through all purchase lines with plant data and runs the four checks per line.
local procedure CanCloseOrder(var PurchHeader: Record "Purchase Header"): Boolean
var
PurchLine: Record "Purchase Line";
PlantNumber: Record "Plant Number";
PlantRentEntry: Record "Plant Rent Entry";
begin
PurchLine.SetRange("Document Type", PurchHeader."Document Type");
PurchLine.SetRange("Document No.", PurchHeader."No.");
PurchLine.SetFilter(Type, '>0');
PurchLine.SetFilter("Plant Type", '<>%1', '');
PurchLine.SetFilter("Plant No.", '<>%1', '');
if not PurchLine.FindSet() then begin
LogSkippedOrder(PurchHeader."No.", '', NoPlantLinesMsg);
exit(false);
end;
repeat
// Check 1: Expected Enddate Rent must be filled
if PurchLine."Expected Enddate Rent" = 0D then begin
LogSkippedOrder(PurchHeader."No.", PurchLine."Plant No.", EndDateNotFilledMsg);
exit(false);
end;
// Check 2 & 3: Plant Number "Ext. Rented Invoiced to" must be filled and equal to end date
if not PlantNumber.Get(PurchLine."Plant Type", PurchLine."Plant No.") then begin
LogSkippedOrder(PurchHeader."No.", PurchLine."Plant No.", PlantNumberNotFoundMsg);
exit(false);
end;
if PlantNumber."Ext. Rented Invoiced to" = 0D then begin
LogSkippedOrder(PurchHeader."No.", PurchLine."Plant No.", InvoicedToNotFilledMsg);
exit(false);
end;
if PurchLine."Expected Enddate Rent" <> PlantNumber."Ext. Rented Invoiced to" then begin
LogSkippedOrder(PurchHeader."No.", PurchLine."Plant No.",
StrSubstNo(DatesNotEqualMsg,
PurchLine."Expected Enddate Rent",
PlantNumber."Ext. Rented Invoiced to"));
exit(false);
end;
// Check 4: Plant Rent Entry with Removed = true must exist
PlantRentEntry.Reset();
PlantRentEntry.SetRange("Plant Type", PurchLine."Plant Type");
PlantRentEntry.SetRange("Plant No.", PurchLine."Plant No.");
PlantRentEntry.SetRange("Vendor No.", PurchHeader."Buy-from Vendor No.");
PlantRentEntry.SetRange(Removed, true);
if PlantRentEntry.IsEmpty() then begin
LogSkippedOrder(PurchHeader."No.", PurchLine."Plant No.", NoExitOrderMsg);
exit(false);
end;
until PurchLine.Next() = 0;
exit(true);
end;
- Step 2: Add the Label variables
NoPlantLinesMsg: Label 'No purchase lines with plant data found.';
EndDateNotFilledMsg: Label 'Expected end date rent is not filled.';
PlantNumberNotFoundMsg: Label 'Plant number not found.';
InvoicedToNotFilledMsg: Label 'Ext. rented invoiced to is not filled.';
DatesNotEqualMsg: Label 'End date %1 does not match invoiced to date %2.';
NoExitOrderMsg: Label 'No exit order found (plant not returned).';
- Step 3: Add LogSkippedOrder stub
local procedure LogSkippedOrder(OrderNo: Code[20]; PlantNo: Code[20]; Reason: Text)
begin
SkippedCount += 1;
// Buffer logic will be implemented in Task 4
end;
- Step 4: Commit
git add src/report/Rep99289.BulkCloseRentalOrders.al
git commit -m "feat(TC-5834): implement rental order validation logic (4 checks per line)"
Task 3: Implement close logic (TryCloseOrder)
Files:
Modify:
src/report/Rep99289.BulkCloseRentalOrders.alStep 1: Implement TryCloseOrder with TryFunction error handling
We use a [TryFunction] wrapper because Codeunit.Run would call the OnRun trigger (Release), not Close. The Commit() before TryClose ensures previously closed orders are not rolled back if this one fails.
local procedure TryCloseOrder(var PurchHeader: Record "Purchase Header")
begin
Commit();
if TryClose(PurchHeader) then
ClosedCount += 1
else
LogSkippedOrder(PurchHeader."No.", '', GetLastErrorText());
end;
[TryFunction]
local procedure TryClose(var PurchHeader: Record "Purchase Header")
var
ReleasePurchDoc: Codeunit "Release Purchase Document";
begin
ReleasePurchDoc.Close(PurchHeader);
end;
- Step 2: Commit
git add src/report/Rep99289.BulkCloseRentalOrders.al
git commit -m "feat(TC-5834): implement close logic with TryFunction error handling"
Task 4: Implement skip logging and results page
Files:
Modify:
src/report/Rep99289.BulkCloseRentalOrders.alCreate:
src/page/Pag99067.BulkCloseRentalOrderLog.alStep 1: Add temp table buffer variables and LogSkippedOrder implementation
We use "Name/Value Buffer" (table 823, standard BC) as a temp table to store skipped orders. Field mapping:
- Name = Order No.
- Value = Plant No.
- "Value Long" = Reason
var
TempSkippedBuffer: Record "Name/Value Buffer" temporary;
EntryNo: Integer;
Replace LogSkippedOrder with full implementation (SkippedCount is already incremented here, single source of truth):
local procedure LogSkippedOrder(OrderNo: Code[20]; PlantNo: Code[20]; Reason: Text)
begin
SkippedCount += 1;
EntryNo += 1;
TempSkippedBuffer.Init();
TempSkippedBuffer.ID := EntryNo;
TempSkippedBuffer.Name := OrderNo;
TempSkippedBuffer.Value := PlantNo;
TempSkippedBuffer."Value Long" := CopyStr(Reason, 1, MaxStrLen(TempSkippedBuffer."Value Long"));
TempSkippedBuffer.Insert();
end;
- Step 2: Implement ShowSkippedOrders
local procedure ShowSkippedOrders()
begin
if TempSkippedBuffer.IsEmpty() then
exit;
Page.Run(Page::"Bulk Close Rental Order Log", TempSkippedBuffer);
end;
- Step 3: Create the log page
page 99067 "Bulk Close Rental Order Log"
{
Caption = 'Bulk Close Rental Order Log';
PageType = List;
SourceTable = "Name/Value Buffer";
SourceTableTemporary = true;
Editable = false;
InsertAllowed = false;
DeleteAllowed = false;
ModifyAllowed = false;
layout
{
area(Content)
{
repeater(Lines)
{
field(OrderNo; Rec.Name)
{
ApplicationArea = All;
Caption = 'Order No.';
}
field(PlantNo; Rec.Value)
{
ApplicationArea = All;
Caption = 'Plant No.';
}
field(Reason; Rec."Value Long")
{
ApplicationArea = All;
Caption = 'Reason';
}
}
}
}
}
- Step 4: Commit
git add src/report/Rep99289.BulkCloseRentalOrders.al src/page/Pag99067.BulkCloseRentalOrderLog.al
git commit -m "feat(TC-5834): add skip logging and results page for bulk close"
Task 5: Add Dutch translations
Files:
Modify:
Translations/Van Wijnen Customisations.nl-NL.xlfStep 1: Build the project to generate the .g.xlf file
The .g.xlf file is auto-generated by the AL compiler. After building, copy the new trans-unit entries from .g.xlf to .nl-NL.xlf and add Dutch translations.
Translations needed:
| English (source) | Dutch (target) |
|---|---|
| Bulk Close Rental Orders | Inhuurorders bulk afsluiten |
| You are about to bulk close rental orders. Continue? | U staat op het punt inhuurorders in bulk af te sluiten. Doorgaan? |
| %1 rental orders closed, %2 rental orders skipped. | %1 inhuurorders afgesloten, %2 inhuurorders overgeslagen. |
| No purchase lines with plant data found. | Geen inkoopregels met materieel gevonden. |
| Expected end date rent is not filled. | Verwachte einddatum huur is niet gevuld. |
| Plant number not found. | Materieelnummer niet gevonden. |
| Ext. rented invoiced to is not filled. | Inhuur gefactureerd t/m is niet gevuld. |
| End date %1 does not match invoiced to date %2. | Einddatum %1 komt niet overeen met gefactureerd t/m datum %2. |
| No exit order found (plant not returned). | Geen exitorder gevonden (materieel niet teruggebracht). |
| Bulk Close Rental Order Log | Logboek bulk afsluiten inhuurorders |
| Order No. | Ordernr. |
| Plant No. | Materieelnr. |
| Reason | Reden |
- Step 2: Commit
git add Translations/Van\ Wijnen\ Customisations.nl-NL.xlf
git commit -m "feat(TC-5834): add Dutch translations for bulk close rental orders"
Task 6: Add to permission set and final verification
Files:
Modify:
src/permissionset/PermissionSet99401.CustPermissions.alStep 1: Add report and page to the permission set
Add to the existing permission set:
report "Bulk Close Rental Orders" = X;
page "Bulk Close Rental Order Log" = X;
- Step 2: Full compile check
Verify the entire extension compiles without errors.
- Step 3: Commit
git add src/permissionset/PermissionSet99401.CustPermissions.al
git commit -m "feat(TC-5834): add bulk close objects to permission set"
Task 7: Create client documentation
Files:
Create:
_DOCS/Wijn/TC-5834/klantmail.mdCreate:
_DOCS/Wijn/TC-5834/technisch-oplossingsontwerp.mdStep 1: Write client email (Dutch, concise, room for screenshots)
Step 2: Write technical solution document (Dutch, deep, with test steps and room for test results)
Step 3: Update knowledge base
Update _DOCS/Wijn/cases/materieel-en-inhuur.md with the new bulk close solution.
- Step 4: Commit
git add _DOCS/Wijn/TC-5834/klantmail.md _DOCS/Wijn/TC-5834/technisch-oplossingsontwerp.md _DOCS/Wijn/cases/materieel-en-inhuur.md
git commit -m "docs(TC-5834): add client email, technical doc, and update knowledge base"
TC-5834: Inhuurorders bulk afsluiten
TC-5834: Inhuurorders bulk afsluiten
Beste collega's,
Naar aanleiding van het verzoek om inhuurorders in bulk te kunnen afsluiten hebben wij een rapport ontwikkeld: Inhuurorders bulk afsluiten.
Wat doet het rapport?
Het rapport controleert automatisch alle openstaande inhuurorders (INH-ORD, status Vrijgegeven) en sluit de orders af die aan alle voorwaarden voldoen:
- Alle regels hebben een gevulde einddatum
- De einddatum is gelijk aan "Inhuur gefactureerd t/m" op het materieelnummer
- Er is een exitorder aanwezig (het materieel is daadwerkelijk teruggebracht)
Orders die niet aan alle voorwaarden voldoen worden overgeslagen. Na afloop toont het rapport een overzicht van afgesloten en overgeslagen orders, inclusief de reden per overgeslagen order.
Hoe te gebruiken?
- Zoek het rapport "Inhuurorders bulk afsluiten" via de zoekbalk
- Optioneel: filter op ordernummer, leverancier of orderdatum
- Klik op OK
- Bevestig dat u wilt doorgaan
- Na afloop verschijnt een samenvatting en (indien van toepassing) een lijst met overgeslagen orders
[Screenshot: rapport openen]
[Screenshot: resultaat na uitvoering]
Mocht u vragen hebben, neem gerust contact op.
Met vriendelijke groet
Technisch oplossingsontwerp
Technisch Oplossingsontwerp TC-5834: Inhuurorders Bulk Afsluiten
Ticket: TC-5834 Klant: Van Wijnen Datum: 2026-03-25 Testbedrijf: 0910
Probleemstelling
De materieeldienst moet periodiek controleren welke inhuurorders afgesloten kunnen worden. Dit gebeurt nu handmatig via pagina "Huidige stand inhuur gefactureerd tot en met" (11020593). Per order wordt gecontroleerd of het materieel teruggebracht is en of de facturatie afgerond is. Dit kost veel tijd bij grote aantallen orders.
Oplossing
Een Processing Only rapport (Rep99289 "Bulk Close Rental Orders") dat inhuurorders automatisch controleert en afsluit wanneer ze aan alle voorwaarden voldoen.
Nieuwe objecten
| Object | ID | Naam |
|---|---|---|
| Report | 99289 | Bulk Close Rental Orders |
| Page | 99067 | Bulk Close Rental Order Log |
Validatielogica
Het rapport filtert op Purchase Header waar:
- Document Type = Order
- No. Series = INH-ORD
- Status = Released
Per order worden alle inkoopregels gecontroleerd (waar Type > 0, Plant Type en Plant No. gevuld). Per regel vier checks:
| # | Check | Bron | Veld |
|---|---|---|---|
| 1 | Einddatum is gevuld | Purchase Line | Expected Enddate Rent (11012443) |
| 2 | Gefactureerd t/m is gevuld | Plant Number (11012552) | Ext. Rented Invoiced to (490) |
| 3 | Einddatum = Gefactureerd t/m | Vergelijking | |
| 4 | Exitorder aanwezig | Plant Rent Entry (11012535) | Removed = true, gefilterd op Vendor No. |
| 5 | Exitdatum minimaal 8 weken geleden | Plant Rent Entry (11012535) | Removed on <= vandaag - 8 weken |
Belangrijk: de exitorder-check (check 4) filtert ook op Vendor No. om te voorkomen dat een exitorder van een eerdere huurperiode bij een andere verhuurder wordt gematcht.
Als alle regels aan alle checks voldoen, wordt de order afgesloten via Codeunit 415 "Release Purchase Document", procedure Close. Dit zet de status op Closed, nult openstaande bedragen en verwerkt commitments.
Foutafhandeling
- Per order wordt een
Commit()uitgevoerd voor de close-poging, zodat eerder afgesloten orders niet teruggerold worden bij een fout - De close-aanroep is gewrapt in een
[TryFunction], zodat fouten (bijv. open goedkeuringsaanvragen op ontvangsten) worden opgevangen en gelogd - Overgeslagen orders worden getoond in een logpagina met ordernummer, materieelnummer en reden
8-weken buffer
Het materieel moet minimaal 8 weken geleden teruggebracht zijn voordat een order afgesloten kan worden. Dit geeft de administratie tijd om alles af te handelen (facturatie, controles). Check 5 in de validatielogica dwingt dit af: Plant Rent Entry."Removed on" moet <= vandaag - 8 weken zijn.
Testen
Alle testen uitvoeren in bedrijf 0910.
Voorbereiding
- Open BC → schakel naar bedrijf 0910
- Zoek "Inhuurorders bulk afsluiten" in de zoekbalk
- Verwacht: het rapport verschijnt in de zoekresultaten
- Noteer een paar inhuurordernummers (INH...) die je gaat gebruiken voor de testen. Open de Inkooporderlijst, filter op Nr. reeks = INH-ORD en Status = Vrijgegeven
Resultaat:
Test 01: Bevestigingsdialoog annuleren
- Open het rapport "Inhuurorders bulk afsluiten"
- Klik op OK
- De bevestigingsdialoog verschijnt: "U staat op het punt inhuurorders in bulk af te sluiten. Doorgaan?"
- Klik Nee
- Verwacht: het rapport stopt, geen enkele order wordt verwerkt
- Controleer: open een van de eerder genoteerde orders → status is nog steeds "Vrijgegeven"
Resultaat:
Test 02: Order die aan alle voorwaarden voldoet
- Zoek een inhuurorder waar:
- Alle regels een gevulde "Expected Enddate Rent" hebben
- Per regel het Plant Number een gevulde "Ext. Rented Invoiced to" heeft die gelijk is aan de einddatum
- Per regel een Plant Rent Entry bestaat met Removed = true voor dezelfde leverancier
- Noteer het ordernummer: _______________
- Open het rapport, filter op dit specifieke ordernummer in het veld "Nr."
- Klik OK → bevestig met Ja
- Verwacht: melding "1 inhuurorders afgesloten, 0 inhuurorders overgeslagen."
- Controleer: open de order → status moet "Afgesloten" zijn
- Controleer: openstaande bedragen op de regels moeten 0 zijn
Resultaat:
Test 03: Order zonder exitorder (materieel niet teruggebracht)
- Zoek een inhuurorder waar het materieel nog niet teruggebracht is (geen exitorder, Plant Rent Entry.Removed = false)
- Noteer het ordernummer: _______________
- Open het rapport, filter op dit ordernummer
- Klik OK → bevestig met Ja
- Verwacht: melding "0 inhuurorders afgesloten, 1 inhuurorders overgeslagen."
- Verwacht: de logpagina opent met:
- Ordernr. = het ordernummer
- Reden = "No exit order found (plant not returned)." (of de Nederlandse vertaling)
- Controleer: open de order → status is nog steeds "Vrijgegeven"
Resultaat:
Test 04: Order waar einddatum niet gevuld is
- Zoek een inhuurorder waar minstens één regel geen "Expected Enddate Rent" heeft (veld is leeg/0D)
- Noteer het ordernummer: _______________
- Open het rapport, filter op dit ordernummer
- Klik OK → bevestig met Ja
- Verwacht: melding "0 afgesloten, 1 overgeslagen"
- Verwacht: logpagina toont reden "Expected end date rent is not filled." met het materieelnummer van de betreffende regel
- Controleer: order status is nog steeds "Vrijgegeven"
Resultaat:
Test 05: Order waar einddatum != gefactureerd t/m
- Zoek een inhuurorder waar de einddatum op een regel afwijkt van "Ext. Rented Invoiced to" op het Plant Number
- Noteer het ordernummer: _______________
- Open het rapport, filter op dit ordernummer
- Klik OK → bevestig met Ja
- Verwacht: melding "0 afgesloten, 1 overgeslagen"
- Verwacht: logpagina toont reden "End date [datum] does not match invoiced to date [datum]."
- Controleer: order status is nog steeds "Vrijgegeven"
Resultaat:
Test 06: Rapport opnieuw draaien na afsluiting
- Dit is een vervolg op Test 02 (dezelfde order die al afgesloten is)
- Open het rapport zonder filters (of met een breed filter)
- Klik OK → bevestig met Ja
- Verwacht: de eerder afgesloten order verschijnt NIET in het resultaat (het rapport filtert op Status = Vrijgegeven)
- Verwacht: de afgesloten order wordt niet dubbel verwerkt of getoond in de logpagina
Resultaat:
Test 07: Exitdatum minder dan 8 weken geleden
- Zoek een inhuurorder waar het materieel recent is teruggebracht (minder dan 8 weken geleden, Plant Rent Entry."Removed on" > vandaag - 8 weken)
- Noteer het ordernummer: _______________
- Noteer de exitdatum: _______________
- Open het rapport, filter op dit ordernummer
- Klik OK → bevestig met Ja
- Verwacht: melding "0 afgesloten, 1 overgeslagen"
- Verwacht: logpagina toont reden "Exit date [datum] is less than 8 weeks ago." met het materieelnummer
- Controleer: order status is nog steeds "Vrijgegeven"
Resultaat:
Test 08: Bulk verwerking (meerdere orders tegelijk)
- Open het rapport ZONDER filter op ordernummer (of met een breed filter, bijv. op leverancier)
- Klik OK → bevestig met Ja
- Verwacht: melding toont het totaal aantal afgesloten en overgeslagen orders
- Verwacht: als er overgeslagen orders zijn, opent de logpagina met een lijst van alle overgeslagen orders + redenen
- Controleer: steekproefsgewijs een paar afgesloten orders → status = Afgesloten, openstaande bedragen = 0
- Controleer: steekproefsgewijs een paar overgeslagen orders → status = Vrijgegeven, de genoemde reden klopt
Resultaat:
STATUS
Afhankelijkheden
| Object | Rol |
|---|---|
| Purchase Header (38) | DataItem, filters |
| Purchase Line (39) | Regelvalidatie |
| Plant Number (11012552) | Ophalen "Ext. Rented Invoiced to" |
| Plant Rent Entry (11012535) | Exitorder check |
| Release Purchase Document (415) | Close procedure |
| Name/Value Buffer (823) | Tijdelijke opslag overgeslagen orders |
Time Entries
| Date | Hours | Description |
|---|---|---|
| 2026-03-25 | 2.5 |