From 3c12e1b69cd83526a6080021b8128a8d448b52f3 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 --- C4/Circulation.pm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index d92cdcc0b2..073ee2cb20 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1558,6 +1558,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.30.2