From e9bab63e80412f3b9e2457ef0f76f6660c8d3d24 Mon Sep 17 00:00:00 2001 From: Lari Taskula Date: Fri, 13 Dec 2019 13:17:55 +0100 Subject: [PATCH] Bug 24239: Let the ILL module set ad hoc hard due dates The Swedish Libris ILL backend lets librarians store a specific due date when an ILL loan is received. This patch set adds a new date_due column to the illrequets table that can be used by the different backends to store a due date. If an illrequest has the date due set, it will be used when the item is checked out instead of the calculation using the circulation conditions. To test: - Apply the patch and make sure the atomic database update is run - Use the FreeForm backend to add one ILL request. Take note of the illrequest_id of the request you created. We refer to this as "x" below. - Connect a biblio (with biblionumber y), that has an item with a barcode, to the ILL request directly in the database: UPDATE illrequests SET biblio_id = y WHERE illrequest_id = x; - Next we set the due date, this would normally be done by or from the backend. UPDATE illrequests SET date_due = "2023-01-01" WHERE illrequest_id = x; - Go to circulation and issue the barcode of the item to the patron associated with the FreeForm ILL request. Verify that the loan gets a due date of 2023-01-01. - Ideally: return the item and issue it again through SIP2 and SCO, and verify that the due date is still 2023-01-01. - Verify that there are no regressions, so that regular calculation of due dates still work. - prove t/db_dependent/Circulation.t (Patch description, test plan and partial code credits to Magnus Enger) Signed-off-by: Katrin Fischer (Patch description and test plan rewritten to reflect changes in development) Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- C4/Circulation.pm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 73f2e5aa77..223013a1a9 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1544,6 +1544,25 @@ sub AddIssue { $datedue = CalcDateDue( $issuedate, $itype, $branchcode, $borrower ); } + + # Check if we need to use an exact due date set by the ILL module + if ( C4::Context->preference('ILLModule') ) { + # Check if there is an ILL connected with the biblio of the item we are issuing + my $ill_request = Koha::Illrequests->search({ + biblio_id => $item_object->biblionumber, + borrowernumber => $borrower->{'borrowernumber'}, + completed => undef, + date_due => { '!=', undef }, + })->next; + + if ( $ill_request and length( $ill_request->date_due ) > 0 ) { + my $ill_dt = dt_from_string( $ill_request->date_due ); + $ill_dt->set_hour(23); + $ill_dt->set_minute(59); + $datedue = $ill_dt; + } + } + $datedue->truncate( to => 'minute' ); my $patron = Koha::Patrons->find( $borrower ); -- 2.34.1