commit 1516f227f9c72d939cdf33da2a5323c03f38a5a9 Author: Jonathan Druart Date: Thu Sep 11 11:34:42 2025 +0200 Bug 40665: Fix Cypress tests Signed-off-by: Jonathan Druart commit ec2fbf3a4d6bf32a0417b3ea00566759433701bd Author: Jonathan Druart Date: Tue Sep 9 13:32:29 2025 +0200 Bug 40765: Fix EDI.t I have no idea why this is fixing the test! Without this patch they fail: t/db_dependent/Koha/EDI.t .. 1/5 # Failed test '14 log lines recorded for passed invoice file' # at t/db_dependent/Koha/EDI.t line 725. # got: '12' # expected: '14' # Failed test 'Warn recorded for transferring items' # at t/db_dependent/Koha/EDI.t line 728. # 'Unmatched item at branch:WID' # doesn't match '(?^u:transferring.*)' # Failed test 'Warn recorded for transferring items' # at t/db_dependent/Koha/EDI.t line 728. # '' # doesn't match '(?^u:transferring.*)' # Failed test 'Warn recorded for unmatched item' # at t/db_dependent/Koha/EDI.t line 728. # '' # doesn't match '(?^u:Unmatched item at branch:.*)' # Looks like you failed 4 tests of 32. Signed-off-by: Lucas Gass commit 621b75ddf0fffa083ba303b0ae4bd381ab6b423e Author: Jonathan Druart Date: Mon Sep 8 10:38:29 2025 +0200 Bug 40765: Prevent acquisition tests to fail if order.quantity = 0 When using TestBuilder to build an order the tests will fail when the object will be saved: 00:09:41 koha-1 | # Looks like you planned 58 tests but ran 26. 00:09:41 koha-1 | 00:09:41 koha-1 | # Failed test 'cancel() tests' 00:09:41 koha-1 | # at t/db_dependent/Koha/Acquisition/Order.t line 1042. 00:09:41 koha-1 | Cannot insert order: Mandatory parameter quantity is missing at t/db_dependent/Koha/Acquisition/Order.t line 868. 00:09:41 koha-1 | # Looks like your test exited with 255 just after 14. 00:09:41 koha-1 | [22:03:54] t/db_dependent/Koha/Acquisition/Order.t This happened on Koha_Main/3350 Signed-off-by: Lucas Gass commit 3f337c53eed500b0698afd98bb5d446260b74a14 Author: Jonathan Druart Date: Mon Sep 8 10:21:55 2025 +0200 Bug 22632: Prevent tests to fail randomly Jenkins was failing on Koha_Master/3350 With this patch we won't rely on the order (timestamp are identical and may not be sorted as expected) 23:56:28 koha-1 | # Failed test 'GetLogs returns results in the log viewer for the merge of 526' 23:56:28 koha-1 | # at t/db_dependent/Koha/Patron/Log.t line 67. 23:56:28 koha-1 | # got: 'G7X8jre jVr_oz8M (eQXWiW9b4jX16424uC3Chn) has been merged into Mwqx7a zkSkFX7 (y_L7flupzFShb8JWYVCwYGSuv)' 23:56:28 koha-1 | # expected: 'exgnQtw lLmxQL9eWY (nHc_VZdFHIXr90p6WrIijDPgFrz8JM38) has been merged into Mwqx7a zkSkFX7 (y_L7flupzFShb8JWYVCwYGSuv)' 23:56:28 koha-1 | 23:56:28 koha-1 | # Failed test 'GetLogs returns results in the log viewer for the merge of 527' 23:56:28 koha-1 | # at t/db_dependent/Koha/Patron/Log.t line 82. 23:56:28 koha-1 | # got: 'exgnQtw lLmxQL9eWY (nHc_VZdFHIXr90p6WrIijDPgFrz8JM38) has been merged into Mwqx7a zkSkFX7 (y_L7flupzFShb8JWYVCwYGSuv)' 23:56:28 koha-1 | # expected: 'G7X8jre jVr_oz8M (eQXWiW9b4jX16424uC3Chn) has been merged into Mwqx7a zkSkFX7 (y_L7flupzFShb8JWYVCwYGSuv)' 23:56:28 koha-1 | # Looks like you failed 2 tests of 4. 23:56:28 koha-1 | 23:56:28 koha-1 | # Failed test 'Test Koha::Patrons::merge' 23:56:28 koha-1 | # at t/db_dependent/Koha/Patron/Log.t line 113. Signed-off-by: Lucas Gass commit 95863d9de5df3d6f49297d09e17b06d77d3add21 Author: Lucas Gass Date: Fri Sep 5 21:02:29 2025 +0000 Bug 31698: DBRev 25.06.00.016 Signed-off-by: Lucas Gass commit b5c520104cd3fdf9235c85cc25c6ef7c00a464bf Author: Lucas Gass Date: Fri Sep 5 19:43:06 2025 +0000 Bug 31698: Add alter_hold_targets to t/Koha/Auth/Permissions.t Signed-off-by: Lucas Gass commit 3c94c093c07849babdfa7c77657dd93e35559436 Author: Lucas Gass Date: Wed Sep 3 19:19:18 2025 +0000 Bug 31698: Make strings in holds.js translatable Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit c55eb574ad91b5de1b5cfd9fd0649f1ecbe42662 Author: Pedro Amorim Date: Wed Sep 3 15:27:47 2025 +0000 Bug 31698: (QA follow-up): Prevent display 'NaN' UI error message If the input is not a number, display an appropriate error message. Additionally, don't make an API call unless the input is a number. Test by doing the following: 1) Step 19: Moving record level holds, the modal says 'Enter the biblionumber of new hold target', but if you enter 'xyz' and then search, the error shown is 'No item found with barcode: NaN'. This patch fixes that. Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit ed5faedae931ab42a8834f35fd7c4ec138d3dba4 Author: Lucas Gass Date: Wed Aug 27 15:52:32 2025 +0000 Bug 31698: Move reamining JS to hold.js Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit 283c45e946bec6e1ab4782be957a51a7cf700ee0 Author: Lucas Gass Date: Mon Aug 25 20:51:54 2025 +0000 Bug 31698: Move request.tt JS to hold.js Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit 715bb4a715efeef47d1d3feb3e73bdccbc8b5591 Author: Lucas Gass Date: Mon Aug 25 21:48:17 2025 +0000 Bug 31698: Report errors and failures back to request.tt Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit 5e42d4b823ca55c6d4dd85c7f2e50a028c3b5ee8 Author: Lucas Gass Date: Wed Aug 13 22:11:07 2025 +0000 Bug 31698: Make searches return only exact matches for barcode/biblionumber Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit 686df63afe09b9f6c77c66748999e9052d9f60b4 Author: Lucas Gass Date: Wed Aug 13 21:01:25 2025 +0000 Bug 31698: Style move selected button and disable when nothing is selected Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit 87e3f4569a35d176196a2386f888273bf4482955 Author: Pedro Amorim Date: Tue Aug 5 14:08:06 2025 +0000 Bug 31698: (QA follow-up): Query biblios endpoint when searching biblios Instead of filtering response on the client. Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit 73c248af79707922077663a36e2aad220bb8fc4c Author: Lucas Gass Date: Mon Jul 28 14:00:28 2025 +0000 Bug 31698: Ensure searches for biblio records return only unique bibs Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit a16f1d403283d78282293fdcec518cf2e3d7603c Author: Lucas Gass Date: Mon May 5 22:16:02 2025 +0000 Bug 31698: Disallow moving waiting or intransit holds Signed-off-by: kristi Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit cae2f9c68c90d4ca1959fa189be6586b804957b0 Author: Lucas Gass Date: Mon May 5 20:51:48 2025 +0000 Bug 31698: Add unit tests Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit e4283da902f5b2c4bea43a804470bd1f5d6fcd7c Author: Lucas Gass Date: Mon May 5 17:01:53 2025 +0000 Bug 31698: Fix modals for biblio level moves Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit c5bac26b7361aae213dc9d72e0328328334b898e Author: Lucas Gass Date: Mon May 5 16:42:31 2025 +0000 Bug 31698: Fix modals for item level moves Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit 1053d0eb1ec6230335fe3ee303034a2be1975f67 Author: Lucas Gass Date: Wed Mar 12 21:31:35 2025 +0000 Bug 31698: Add ability to move holds to new items or new records Test plan: 1. APPLY PATCH, updatedatabase, restart_all 2. Have two staff members. 1. Superlibrarian, 2. Staff with new permission to `alter_hold_targets` 3. Now place some holds on different record, you'll want some item level holds and some record level holds. 4. After placing some holds go to a record with some holds on it. 5. Go to the holds tab (reserve/request.p) 6. You should notice a disabled 'Move selected (0)' button, next to 'Cancel selected (0)' 7. Select some holds to move, ensure that the number updates accordingly. ( Move selected (2) ) 8. When you click the button you should see 2 options, 'Item level holds to a different item' and 'Record level holds to a different record' 9. Clicking on either should bring up a modal with information about the holds you selected to move. 10. If you have item level holds and you select 'Item level holds to a different item' those holds should appear pre-checked. 11. If you have item level holds and you select 'Record level holds to a different record' those holds checkboxes should be disabled by default, you should see the 'Problem' as 'Cannot move a waiting or record level hold' 12. If you are moving a item level hold you should see a searchbar labeled 'Enter the item barcode of new hold target:'. 13. Enter a full or partial barcode and click search 14. You should see your item, if it exists. 15. Check 'Move all selected item level holds to this item', once you do so the yellow 'Move selected holds' button should be enabled. 16. Click 'Move selected holds', the hold should be moved. 17. You should see a message like " Moved the following holds: Hold ID: 1854 - Moved from The Arden edition of the works of William Shakespeare. to The Arden edition of the works of William Shakespeare." 19. Do steps 12 - 17 again, but with a record level hold. 20. Now make or have many holds on a specific target record to test priority. Make note of the current priority 21. Now move a hold on to that record, testing both item and record level holds. 22. Now on the target record review the priority. The holds originally on the record should not have changed. The hold you move should now have the lowest priority on the record. 23. Check the original record, if a hold was moved all other priority should have been adjusted correctly. FOr example, if the hold you moved was 3 of 4 then the others should have adjusted priority of 1 2 3 now. 24. Turn on HoldsLog if it is disabled. 25. Move some holds, both item and record ones, and review the logs after each one. There should be a correct MODIFY entry for each move. 26. Make an item with a hold on it as damaged and turn on AllowHoldsOnDamagedItems. Try to move the hold, you should get an error telling you that the target item is damaged. 27. Now login as the non-superlibrarian patron from step 2. If they have the `alter_hold_targets` permission they should see the 'Move selected' button. 28. Revoke the `alter_hold_targets` permission. The button should not appear now. Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit ceb5ec8b155682e8ffc52306ef4ca491effeb0e0 Author: Lucas Gass Date: Wed Mar 12 17:30:24 2025 +0000 Bug 31698: Add alter_hold_targets permission Signed-off-by: Pedro Amorim Signed-off-by: Lucas Gass commit cd108870fdd7b0f91849ef5adec2589678f4b493 Author: Lucas Gass Date: Fri Sep 5 20:57:59 2025 +0000 Bug 40665: (RM follow-up) Adjust number of tests in t/db_dependent/Circulation.t Signed-off-by: Lucas Gass commit 88a9eb7a2f8cd3a9f8839a930d0a1d461cd2b33c Author: Lucas Gass Date: Fri Sep 5 20:52:38 2025 +0000 Bug 40665: DBIC Schema changes Signed-off-by: Lucas Gass commit 2e84dfa24f54d9f4f181779f8330d97797174d52 Author: Lucas Gass Date: Fri Sep 5 20:50:46 2025 +0000 Bug 40665: DBRev 25.06.00.015 Signed-off-by: Lucas Gass commit c0f191b79c1171fdd24b2c70c8c410ec768e68e0 Author: Paul Derscheid Date: Mon Aug 18 15:43:00 2025 +0000 Bug 40665: Link checkouts to bookings This patch adds a booking_id field to the issues and old_issues tables to create a linkage between checkouts and the bookings that generated them. When a patron with a booking checks out the reserved item, the checkout is linked to their booking and the booking status is updated to 'completed'. The booking_id is preserved during renewals and when checkouts are moved to old_issues upon return. Database changes: - Add booking_id column to issues and old_issues tables - Add foreign key constraints to maintain referential integrity Test plan: 1. Apply the database update 2. Restart services 3. Create a booking for a patron 4. When the patron checks out the booked item: a. Verify the checkout links to the booking (booking_id is set) b. Verify the booking status changes to 'completed' 5. Renew the checkout a. Verify the booking_id is preserved after renewal b. Check the database: SELECT booking_id FROM issues WHERE issue_id = X 6. Return the item a. Verify the checkout moves to old_issues b. Verify the booking_id is preserved in old_issues 7. Test the new Koha::Booking methods: a. For a booking with a checkout, verify $booking->checkout returns the correct Koha::Checkout object b. For a booking with an old checkout, verify $booking->old_checkout returns the correct Koha::Old::Checkout object 8. Test the API: a. Verify checkout endpoints include booking_id in responses b. Verify the booking relationship can be embedded using x-koha-embed: booking 9. Run the test suite: prove t/db_dependent/Circulation.t prove t/db_dependent/Koha/Booking.t prove t/db_dependent/Koha/Checkout.t NOTE: I also thought about the inverse: linking to a checkout from the booking, but as Koha is a circulation centric system, this approach makes more sense in my opinion. I also thought about bidirectional linking via FKs but that is too much maintenance overhead (and potential error source) that we don't need. The inverse lookups should still be performant through the FKs. Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 0fcac52de5ae2739517c79c9ed898fc553363d0c Author: Paul Derscheid Date: Mon Aug 18 15:42:12 2025 +0000 Bug 40665: API spec changes Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit f14caf1ab6ffdc31aa18b79f4796e856ca221768 Author: Paul Derscheid Date: Mon Aug 18 15:41:32 2025 +0000 Bug 40665: Add tests Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 1460ddc22204265bbaac401788cf13418955c25a Author: Paul Derscheid Date: Mon Aug 18 15:40:05 2025 +0000 Bug 40665: Database update This patch updates the database schema to add booking_id foreign key columns to both issues and old_issues tables, enabling the linkage between checkouts and the bookings that generated them. Schema changes: - Add booking_id column to issues and old_issues tables - Add foreign key constraints referencing bookings table - Preserve referential integrity with appropriate CASCADE actions Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 894c5599aec531bf9885a7b1f77c5f21ca49d6a0 Author: Jonathan Druart Date: Thu Sep 4 11:54:59 2025 +0200 Bug 40663: Revert "Bug 40490: Remove warnings from GD::Barcode::QRcode - U24" This reverts commit fd6ceb6b244bf65d8cf0c1144a9a903490fdaadf. Signed-off-by: Tomas Cohen Arazi Signed-off-by: Lucas Gass commit 130a6148e9fd9d26f570a7acae743f93fa222a78 Author: Tomás Cohen Arazi Date: Mon Aug 18 10:34:51 2025 -0300 Bug 40663: Update GD::Barcode::QRcode to v2.01 1. Start an Ubuntu 24.04 KTD: $ KOHA_IMAGE=main-noble ktd --name noble up -d 2. Run: $ ktd --name noble --shell k$ pmvers GD::Barcode::QRcode => 2.00 3. Run: k$ prove t/db_dependent/Koha/Auth/TwoFactorAuth.t => FAIL: Tests fail! 4. Run: k$ sudo cpanm -i GD::Barcode::QRcode@2.01 5. Repeat 3 => SUCCESS: Tests pass! 6. Exit the 24.04 KTD and stop it: k$ exit $ ktd --name noble down 7. Start a Debian 12 KTD: $ KOHA_IMAGE=main-bookworm ktd --name bookworm up -d 8. Run: $ ktd --name bookworm --shell k$ pmvers GD::Barcode::QRcode => 0.01 9. Run: k$ prove t/db_dependent/Koha/Auth/TwoFactorAuth.t => SUCCESS: Tests pass! 10. Run: k$ sudo cpanm -i GD::Barcode::QRcode@2.01 11. Repeat 9 => SUCCESS: Tests still pass! Signed-off-by: Tomas Cohen Arazi Signed-off-by: mason james Signed-off-by: Tomas Cohen Arazi Signed-off-by: Lucas Gass commit 84561848781c6997817639fdfba31bec0bd6512d Author: Jonathan Druart Date: Fri Jul 25 10:27:27 2025 +0200 Bug 40753: Fix DT's SaveState on the orders table We build the the orders table depending on some conditions (sysprefs or if the basket is closed/opened). DataTables cannot correctly restore the state because the number of columns stored in localStorage is different than the one we have one the table. Test plan: Open and close a basket Confirm that the table is correctly displayed (no extra columns) Signed-off-by: David Nind Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit ad11a32584a3945c3b0a0765732b07ab0ea61ede Author: Jonathan Druart Date: Thu Sep 4 12:51:09 2025 +0200 Bug 39930: Prevent DT's state to be lost overnight The default value for stateDuration is 7200 (2h). Which means DataTables will ignore the saved state if reused after this delay. Additionally is causes problem on some tables where the default state is not restored and all columns are displayed. From https://datatables.net/reference/option/stateDuration ``` Please note that the value is given in seconds. The value 0 is a special value as it indicates that the state can be stored and retrieved indefinitely with no time limit. ``` We are going to set it to 0 so that the state is only lost/reset after a logout Test plan: Ideally you can should edit this file and set saveState to 60 (seconds), so it's easy to test. Do not apply this patch and confirm that the state is not restored after either 60s or 2h (if you modified the file or not). It is a problem on the checkout list table as extra columns (like "Today's checkouts") are displayed. With this patch applied the state should be restored correctly. If you logout the state will be lost however. Ideally we might want to store user's preferences on the server. Signed-off-by: Ludovic Julien Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit 3a12111b4049b64a2d28dc320756e47e9f93f7f2 Author: Lucas Gass Date: Fri Sep 5 20:36:18 2025 +0000 Bug 37661: DBRev 25.06.00.014 Signed-off-by: Lucas Gass commit 46c818be4e3fd3ad13c47a8578c0a1169765dbe6 Author: Baptiste Wojtkowski Date: Wed Jul 23 15:39:03 2025 +0200 Bug 37661: Add a new syspref EnableBooking This patch makes the Booking module dependant of a new YesNo syspref: EnableBooking To do this, I tried and get all changes using the graph of Bug 29002 and got interrested in every tt change to make changes on this depend on the new syspref. File inside the booking module should not be amended. Here are the files I found relevant for each patch Bug 37737: - koha-tmpl/intranet-tmpl/prog/en/includes/patron-detail-tabs.inc - koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt Bug 37736: - koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation-home.tt Bug 29002: - koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc - koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/ISBDdetail.tt - koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tt - koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt - koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/imageviewer.tt - koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/labeledMARCdetail.tt - koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt TEST PLAN: 1 - Set "Bookable = 1" on a given item 2 - Make sure you know where are located - The field bookable on exemplaries - The button "Place booking" in item toolbae - The link "Bookings (0)" in item menu 3 - Apply patch and update database 4 - Check that every field listed in 2 - is still present 5 - Set the syspref "EnableBooking" to "Disable" 6 - Check that every field listed in 2 - is still present 7 - Browse Norme, ISBD, Marc, Items tabs + pages imageviewer.pl, labeledMARCdetail.pl and check that nothing is broken Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 7491053be659ec9b4b5b2af3a0c063eec35ea251 Author: Pedro Amorim Date: Tue Sep 2 13:03:32 2025 +0000 Bug 39345: (QA follow-up): Fix erm_custom_reports.t prove t/db_dependent/api/v1/erm_custom_reports.t Signed-off-by: Lucas Gass commit 9482590909251d3b26085312805dc816ba0032cd Author: Pedro Amorim Date: Thu Aug 21 09:32:41 2025 +0000 Bug 39345: (QA follow-up): Add exception handling for unsupported counter release To test this on the UI, you can add the following line of code at the beginning on 'new' in SushiCounter.pm: ->{response}->{Report_Header}->{Release} = 6; This will force the release to be '6'. Then you can perform a harvest using the UI. The background job will fail with the error message saying that counter release 6 is not supported prove t/db_dependent/Koha/BackgroundJobs/ErmSushiHarvester.t Signed-off-by: Eric Phetteplace Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit dcf28e5b8a11d6b5b78d3852a511c42850db68b4 Author: Pedro Amorim Date: Thu Aug 21 08:23:48 2025 +0000 Bug 39345: (QA follow-up): Fix QA complaints QA script still fails but I believe these are false positives caused by the tests files being moved Signed-off-by: Eric Phetteplace Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit cb97c60d162c8d0f6020e14100b633ea6a94775d Author: Pedro Amorim Date: Thu Aug 21 08:21:11 2025 +0000 Bug 39345: (QA follow-up): Fix data provider tests Update original tests to consider COUNTER 5 specifically. Add new test for COUNTER 5.1. Signed-off-by: Eric Phetteplace Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit ff82cd37f52b64ba1047001628df6abe7a7b8fd3 Author: Pedro Amorim Date: Wed Aug 20 10:05:24 2025 +0000 Bug 39345: Use data provider report release to establish service URL Signed-off-by: Eric Phetteplace Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit db5f51e4ce3436597fc09312a80d235c1b70108b Author: Pedro Amorim Date: Tue Aug 12 12:46:00 2025 +0000 Bug 39345: Add COUNTER 5.1 Tests JSON data files extracted from sample responses at: https://counter5.cambridge.org/r51/sushi-docs/#/ Additional docs referenced: https://cop5.projectcounter.org/en/5.1/appendices/g-sample-counter-reports-and-standard-views.html Run: prove t/db_dependent/Koha/ERM/EUsage/* Signed-off-by: Eric Phetteplace Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit f58e2110ca7f05861bd5ee7bc30cec6cdf9251f8 Author: Pedro Amorim Date: Tue Aug 12 12:46:30 2025 +0000 Bug 39345: Add COUNTER 5.1 support This moves the original SUSHI COUNTER logic to a new Koha::ERM::EUsage::COUNTER::5 class that extends Koha::ERM::EUsage::SushiCounter. Adds a new Koha::ERM::EUsage::COUNTER::5_1 class with COUNTER 5.1 specific logic. Keeps common logic in Koha::ERM::EUsage::SushiCounter. This ensures we support both COUNTER 5.0 and COUNTER 5.1, but should hopefully help us better maintain COUNTER 5.1 going forward, without having to worry about COUNTER 5.0, as the code is seperated. This should also better set us up for adding support for possible future COUNTER releases. Test plan, k-t-d: 1) Enable ERMModule 2) Add a new usage data provider at: /cgi-bin/koha/erm/eusage/usage_data_providers/add 3) Add the required credential parameters e.g. Customer ID and Requestor ID 4) Update the 'Report release' to '5.1', no single quote. (If you add anything other than '5', it'll default to '5.1') 5) Visit the list of data providers and click the 'Run now' button for your data provider: /cgi-bin/koha/erm/eusage/usage_data_providers 6) Click the background job link at the top. Verify the background job runs as expected. 7) After the successful harvest, run a custom report at, ensure the data is all correct: /cgi-bin/koha/erm/eusage/reports 8) Visit the data provider at: /cgi-bin/koha/erm/eusage/usage_data_providers/ 9) Click the 'Import logs' tab, download the COUNTER 5.1 counter file. Open the file and verify the data is correct. Signed-off-by: Eric Phetteplace Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit 1f94070e60bc90970b71b2b5e1cd39b68097ac00 Author: Pedro Amorim Date: Mon Aug 18 12:19:19 2025 +0000 Bug 39345: Preparation: Move original test files We are now considering more than one COUNTER release. Move test files accordingly. prove t/db_dependent/Koha/ERM/EUsage/* Signed-off-by: Eric Phetteplace Signed-off-by: Nick Clemens Signed-off-by: Lucas Gass commit 26203a66098fdd610e6a1a5b1782e9f46cd33d07 Author: Jason Robb Date: Thu Apr 10 17:13:09 2025 +0000 Bug 36455: (follow-up) Changed html filters to uri Signed-off-by: Andrew Fuerste Henry Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit f86a07a9f7dc64b657baf0e1eacad271db57c884 Author: Jason Robb Date: Thu Mar 13 17:17:08 2025 +0000 Bug 36455: (follow-up) Default the hold queue link to your logged in library Also fixed the link on circ-nav and the breadcrumbs links. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 00e10862e9074226dd8cca7e2b0bbc2391e6f3f5 Author: Jason Robb Date: Thu Feb 13 18:43:19 2025 +0000 Bug 36455: Default the hold queue link to your logged in library This patch reduces the number of click for the average librarian user. To test: 1. Change your logged in branch to something other than Centerville 2. Navigate to the circulation home page 3. Click on the Holds queue link 4. Observe that you have to hit Submit to continue 5. Apply patch 6. Repeat steps 1 and 2 7. Observe that the holds queue comes up with your branch preselected Signed-off-by: Lucas Gass Signed-off-by: Andrew Fuerste Henry Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit d16fde5cc12bd8d0e2e6b01e7f8890750c22d240 Author: Owen Leonard Date: Mon Jul 28 15:20:07 2025 +0000 Bug 38642: DataTables expand button has no label This patch modifies the OPAC's DataTables JS so that any table heading with a "dtr-control-col" will trigger the application of title and aria-label attributes on the responsive controls column. All OPAC tables with a responsive configuration have been modified with the class. To test, apply the patch and check all affected tables. - Narrow the width of the browser window until the responsive functionality is triggered. - Check that the expand/collapse button has title and aria-label attributes, "Expand or collapse row details" - Authority search results - Course reserves - List of courses - Course reserves - List of titles for a course - Bibliographic detail page: - Holdsings - Subscriptions - Search history - Bibliographic, past and present - Authorities, past and present - Most popular titles - Logged in user's active clubs - Logged in user's scheduled curbside pickups - Logged in user's recalls history - Logged in user's checkout history - Logged in user's messaging settings - Logged in user's submitted tags Sponsored-by: Athens County Public Libraries Signed-off-by: Jake Deery Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 47f0aab19f3f5eff542a3f23ed79ae3a1ffd6f15 Author: Tomás Cohen Arazi Date: Tue Aug 12 14:46:38 2025 -0300 Bug 40636: (follow-up) Cache the calendar object Signed-off-by: Paul Derscheid Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 31dced9c8b045474059a970b320711226e9ec166 Author: Tomás Cohen Arazi Date: Tue Aug 12 11:22:26 2025 -0300 Bug 40636: Fix holiday logic in CancelExpiredReserves with comprehensive edge case handling CancelExpiredReserves had incorrect holiday logic that checked if **today** is a holiday instead of checking if the **hold's expiration date** was a holiday. This caused: * Holds that expired on non-holidays to remain active if cleanup script ran on holidays * Holds that expired on holidays to be cancelled if cleanup script ran on non-holidays The simple fix exposed additional edge cases around server downtime that could leave holds active indefinitely. Changes: * Implements comprehensive holiday logic when `ExpireReservesOnHolidays = 0` * Same-day protection: Don't cancel holds that expire TODAY if today is a holiday * Historical cleanup: Cancel holds that expired in the past when running on business days * Retrospective cancellation: Handle server downtime by checking for missed business days * Comprehensive test suite covering all scenarios including long-term expired holds To test: 1. Apply the tests patch 2. Run: $ ktd --shell k$ prove t/db_dependent/Reserves/CancelExpiredReserves.t => FAIL: Tests fail! The logic in the method is wrong! 3. Apply this patch 4. Repeat 2 => SUCCESS: All tests pass, demonstrating correct behavior in all scenarios 5. Sign off :-D Signed-off-by: Paul Derscheid Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 828bf1917d7a1ed836fb56053f45cac71099a137 Author: Tomás Cohen Arazi Date: Tue Aug 12 11:13:54 2025 -0300 Bug 40636: Regression tests This patch adds regression tests that demonstrate the bug in CancelExpiredReserves where the holiday logic checks if today is a holiday instead of checking if the hold's expiration date was a holiday. The bug causes: 1. Holds that expired on non-holidays to remain active if the cleanup script runs on a holiday 2. Holds that expired on holidays to be cancelled if the cleanup script runs on a non-holiday Test scenarios added: - Hold expired on Monday (non-holiday), script runs on Tuesday (holiday) - Hold expired on Wednesday (holiday), script runs on Thursday (non-holiday) - Hold expired on Friday (non-holiday), script runs on Sunday (holiday) - Hold expired on Saturday (holiday), script runs on Sunday (holiday) These tests currently fail, demonstrating the bug exists. When the bug is fixed, all tests should pass. Signed-off-by: Paul Derscheid Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 2bfb86afb5a47b5febfc19dd138b545246a89df3 Author: Tomás Cohen Arazi Date: Tue Aug 12 14:25:37 2025 -0300 Bug 40636: Add `Koha::Calendar->has_business_days_between()` method This patch adds a new method to Koha::Calendar that returns a boolean indicating whether there are any business days between two given dates (exclusive). Implementation details: * Returns 1 if any business days exist between start and end dates * Returns 0 for consecutive days, same dates, or only holidays between * Uses exclusive range (does not include start or end dates) * Handles date comparison and timezone normalization * Efficient early return when first business day is found This is designed specifically for use cases like detecting missed business days due to server downtime or scheduling issues. To test: 1. Apply patch 2. Run: $ ktd --shell k$ prove t/db_dependent/Koha/Calendar.t => SUCCESS: All tests pass! 3. Sign off :-D Signed-off-by: Paul Derscheid Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass