commit ce09a18d560b2e56d2270e605af72a26a6eab3da Author: Jonathan Druart Date: Thu Feb 12 15:29:40 2026 +0100 Bug 41837: Remove $path from C4::Templates commit 571d609ccd443c17d9a96fc83d85493b4c4aff0f Date: Tue Dec 2 22:13:25 2003 +0000 fix for bug 600 modified: C4/Output.pm -my $path = C4::Context->config('includes') || - "/usr/local/www/hdl/htdocs/includes"; +#FIXME: this is a quick fix to stop rc1 installing broken +#Still trying to figure out the correct fix. +my $path = C4::Context->config('intrahtdocs')."/intranet-tmpl/default/en/includes/"; This FIXME got moved to C4/Templates.pm: commit 6b8be20497dd877c4ba5c5278a89fd82fc0862a9 Date: Thu Aug 25 15:01:19 2011 +0200 Bug 6755 Problems with switching languages I think we are ready for "rc1" and we should remove this $path, that is actually not used in C4::Templates... sigh... Signed-off-by: David Nind Signed-off-by: David Cook Signed-off-by: Lucas Gass commit c48aef304fcbca8c257ad15cb395c1f522316e61 Author: Baptiste Wojtkowski Date: Fri Nov 28 11:24:18 2025 +0000 Bug 41330: Escape braces in serials number management Do not apply patches before 1 - Create a new subscription to a serial 2 - Go to 'Serial Collection' panel and click on edit serials button 3 - Try and edit the serial number to "{1}" -> error 500 4 - Apply only unit tests patch and run `prove t/Serials/ModSerialStatus.t` -> Tests will not pass 5 - Apply patch and proceed again to 2&3 -> you will get no error 6 - run `prove t/Serials/ModSerialStatus.t` -> tests will pass Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Lucas Gass commit 4fd0ba028ca410610df73064e9805e78b58e0001 Author: Baptiste Wojtkowski Date: Fri Nov 28 10:54:01 2025 +0000 Bug 41330: Unit tests Do not apply patches before 1 - Create a new subscription to a serial 2 - Go to 'Serial Collection' panel and click on edit serials button 3 - Try and edit the serial number to "{1}" -> error 500 4 - Apply only unit tests patch and run `prove t/Serials/ModSerialStatus.t` -> Tests will not pass 5 - Apply patch and proceed again to 2&3 -> you will get no error 6 - run `prove t/Serials/ModSerialStatus.t` -> tests will pass Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Lucas Gass commit b6fea1c1abba515a16abd2872e5ccc90936bc337 Author: Petro Vashchuk Date: Mon Dec 1 16:31:44 2025 +0200 Bug 41338: Hold found notice should show item's home library and where it is currently checked in This patch adds a description of item's home library and the library where the item is currently checked in at, to the hold found notice when you check in the item. Also to avoid redundancy, the home library will be shown only when destination branch is different from the home branch. To reproduce: 1. Configure three libraries, A, B and C. 2. Create an item with the home library A. 3. Check in the item at the library B. 4. Place a hold with a pickup branch C and then check thought the interface for the same library C. 5. The only information about branch related to the item will be "Transfer to: Fairfield". 6. Click ignore and cancel the transfer. 7. Apply the patch. 8. Check in the item again. 9. This time you should see the full information about home library and where the item is currently checked in at. Signed-off-by: Owen Leonard Signed-off-by: Kyle M Hall Signed-off-by: Lucas Gass commit 43aee2785e6c952ffc4b9bd0f7d21c231c7dd888 Author: Paul Derscheid Date: Fri Mar 6 17:20:02 2026 +0100 Bug 42014: (follow-up) Only show empty state when patron is not on any list - The empty state message was shown when available_lists was empty but the patron was already on all existing lists - Add !in_lists guard so the message only displays when the patron is truly not on any list Signed-off-by: Owen Leonard Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 02128e65707f8c9bd5f1005c1a1092092e688b2d Author: Paul Derscheid Date: Fri Mar 6 16:12:57 2026 +0100 Bug 42014: Show empty state message on patron lists tab - When no patron lists exist in the system, the patron lists tab on the patron detail page renders completely blank - Other tabs follow the convention of showing a message in the empty state (e.g. "Patron has nothing on hold.") - Add an empty state message with a link to create a new patron list, matching the established pattern To test: - Go to a patron detail page and click the "Patron lists" tab - If no patron lists exist, observe the tab is blank - Apply patch - Repeat the above steps - Verify the tab now shows "Patron is not on any list." with a link to create a new patron list - Click the link and create a patron list - Return to the patron detail page and verify the "Add patron to list" dropdown now appears instead Signed-off-by: Owen Leonard Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 4ce8081f071915904adce0ace04f7f3ae860c722 Author: Martin Renvoize Date: Wed Mar 4 16:03:40 2026 +0000 Bug 29923: Prevent overpayment credit when written-off accruing fine is adjusted on check-in When a staff member writes off an accruing fine and the item is subsequently checked in (backdated or in fine-free mode), the fine amount is recalculated downward via adjust(). The previous code unconditionally created an OVERPAYMENT credit whenever the adjusted outstanding went negative, regardless of whether the existing credits were reversible payments or non-reversible writeoffs/discounts. This caused patrons to receive an erroneous credit equal to the written-off amount, since writeoffs should simply be absorbed when the underlying fine shrinks - no refund is due. The fix calculates the total non-reversible credits (writeoffs, discounts, cancellations) applied to the debit using the existing filter_by_non_reversible method, and only generates an OVERPAYMENT credit for the portion attributable to reversible cash payments that exceed the recalculated fine amount. Test plan: 1. Write off an accruing fine in full 2. Check the item in (backdated or fine-free) 3. Confirm no overpayment credit is generated for the patron Signed-off-by: Benjamin Daeuber Signed-off-by: Andrew Fuerste Henry Signed-off-by: Lucas Gass commit 46fb776762c4b7e9470791709f898fb321eef4c1 Author: Jake Deery Date: Tue Mar 3 13:31:07 2026 +0000 Bug 41976: LinkWrapper no longer mangles links This patch fixes a bug where, context-dependent, LinkWrapper can keep referencing back to links that should be out of scope. This was causing odd behaviour whilst writing Bug 14962 - namely, links returning as the same value in a table of multiple rows due to LinkWrapper treating linkData.href as one and the same for each row. TO TEST: == APPLY PATCH == a) enable ERMModule syspref, go to /cgi-bin/koha/erm/erm.pl b) notice all links and buttons still work as expected c) go to /cgi-bin/koha/sip2/sip2.pl d) notice all links and buttons still work as expected e) go to /cgi-bin/koha/acquisition/vendors f) notice all links and buttons still work as expected g) enable PreservationModule syspref, go to /cgi-bin/koha/preservation/home.pl h) notice all links and buttons still work as expected == SIGN OFF == Signed-off-by: David Nind Signed-off-by: Andrew Fuerste Henry Signed-off-by: Lucas Gass commit 3229f8a3e622d6be883dab1d9aa85ef2201735af Author: Lucas Gass Date: Mon Mar 9 23:03:53 2026 +0000 Bug 41409: DBIC changes Signed-off-by: Lucas Gass commit e7855c0c016e2d0047c077f7057b7f7c6ef41a80 Author: Jonathan Druart Date: Mon Mar 2 11:15:42 2026 +0100 Bug 41409: Add COMMENT to kohastructure To fix misc4dev/run_tests.pl --run-db-compare-only Signed-off-by: Lucas Gass commit 233e02fc1cbe4feadc480ccd9d9ba02a1fa34cf8 Author: Baptiste Wojtkowski Date: Thu Feb 19 14:52:20 2026 +0000 Bug 39725: Remove GetSuggestionByStatus from C4/Suggestions.pm Signed-off-by: Owen Leonard Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 452089fc007312e4ead8e6c7e2668ae49355018b Author: Baptiste Wojtkowski Date: Wed Mar 4 15:46:22 2026 +0000 Bug 39724: (follow-up) use the suggestion object in neworderempty.tt Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit e4f14b3b1d7104b370c42e590c2a555286645488 Author: Baptiste Wojtkowski Date: Thu Feb 19 14:34:21 2026 +0000 Bug 39724: Remove GetSuggestionInfo from C4/Suggestions.pm Signed-off-by: Owen Leonard Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 713b525d1f35653e5d2393fd2bc3aa2c976428a2 Author: Baptiste Wojtkowski Date: Tue Mar 3 15:48:53 2026 +0000 Bug 39723: (follow-up) only use the suggestion object in template params Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit df21bc24ebaaa2de23c21fe430f962950d4ba0df Author: Baptiste Wojtkowski Date: Tue Jan 20 13:27:30 2026 +0000 Bug 39723: Remove GetSuggestionInfoFromBiblionumber from C4/Suggestions.pm To test: Create, edit and receive a command from a suggestion (the lonely call of modReceiveOrder is at the receipt in acqui/finishreceive.pl) Run `prove prove t/db_dependent/Acquisition.t` Run `prove prove t/db_dependent/Suggestions.t` Signed-off-by: Owen Leonard Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 5323b8858eff7a13352edccdea8076342ebbeee8 Author: Emmi Takkinen Date: Fri Nov 7 08:17:49 2025 +0200 Bug 36920: Tidy file Signed-off-by: Owen Leonard Signed-off-by: Kyle M Hall Signed-off-by: Lucas Gass commit 597866b9d564fb1ba39df559f1955719e1c859ea Author: Katariina Pohto Date: Thu May 23 12:46:11 2024 +0300 Bug 36920: Greater/less than search option for item search page field drop-down menu The field drop-down menu (including custom fields) can currently only use operators 'is' (LIKE) and 'is not' (NOT LIKE). Greater and less than operators would be useful especially for date fields. This patch adds '>' and '<' operators to the search. 1. Go to item search page and navigate to the field drop-down menu (default value Barcode). 2. Note that the operator choices for this search menu are 'is' and 'is not'. 3. Apply patch and refresh cache. 4. Navigate back to the menu and note that the operator menu now includes '<' and '>'. 5. Choose one of the new values and refresh page to see that the selection remains. 6. Test a field or several with the new operators to see that the new operators are working as intended. Signed-off-by: David Nind Signed-off-by: Owen Leonard Signed-off-by: Kyle M Hall Signed-off-by: Lucas Gass commit 713cae3a498bbbdc9346223b9e3fe6de69fc5760 Author: Owen Leonard Date: Tue Oct 28 17:30:10 2025 +0000 Bug 41126: Move shelving location into a separate column in inventory This patch updates the inventory template so that items' shelving location is showin in its own column in the table of results. This makes it consisten with other displays like the bibliographic detail holdings table and the holds queue report. To test, apply the patch and restart services. - If necessary, modify a few items to add a shelving location. - Go to Cataloging -> Inventory - To narrow down the results, I used the item call number fields under "Item location filters." - Submit the form. - In the list of results, confirm that there is a separate column for shelving location and that the correct information is displayed. - Confirm that the column visibility menu works to show and hide the column. - Go to Administration -> Table settings -> Tools (sic) -> Inventory - Confirm that there is a checkbox for the shelving location column and that your changes to the column's configuration are reflected in the inventory results. - Because of DataTables state saving feature you might have to clear your browser's local storage in order to see the new column configuration. Sponsored-by: Athens County Public Libraries Signed-off-by: Laura_Escamilla Signed-off-by: Katrin Fischer Signed-off-by: Lucas Gass commit b53496e069f0d4faa2cf2c3e4304893ec201b874 Author: David Cook Date: Tue Mar 3 23:47:54 2026 +0000 Bug 41986: Add more names to Contact information and clarify preferred name This patch adds the "Middle name" to the Contact information on moremember.pl, and it adds "Preferred name:" when it differs from the "First name:". This provides maximum clarity to staff users. Test plan: 0. Apply the patch 1. Go to the "Patrons" module and search for or add a new patron 2. Add a firstname, a middle name, and a surname. Also add a "Preferred name" which matches the firstname. 3. Go to "Details" on the sidebar, and note that "First name", "Middle name", and "Surname" appear in the "Contact information". 4. Edit the patron and change "Preferred name" to a name that does not match the "First name" 5. Go to "Details" on the sidebar, and note that "Preferred name" now shows as well. 6. Enjoy fully comprehending which name is which for the patron! Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 84a774d4bcde953b76b9f03248f9b4466a048b06 Author: David Nind Date: Fri Feb 27 23:29:18 2026 +0000 Bug 41958: Rename BibTeX cart and list download options in the staff interface This patch renames BibTex to BibTeX (with a capital X) for the staff interface cart and list download options, to match the OPAC. Test plan: 1. Log in to the staff interface and search for a term that returns results. 2. Add some records from the results to the cart (select records > Add to cart). 3. Add some records from the results to a new public list (select records > Add to list > New list > name the list > make it a public list > Save). 4. Note the download options for the cart and the spelling: Cart > Download > BibTexi (with a lowercase X). 5. Note the download options for lists and the spelling: Lists > Public lists > select the list > Download list > BibTex (with a lowercase X). 6. Go to the OPAC and search for a term that returns results. 7. Add some records from the results to the cart (select records > Add to cart). 8. Note the download options for the cart and the spelling (with a capital X): Cart > Download > BibTeX. 9. Note the download options for lists and the spelling (with a capital X): Lists > Public lists > the name of your list > Download > BibTeX. 10. Apply the patch. 11. Recheck the download options in steps 4 and 5. 12. The option should now show as BibTeX (with a capital X). Signed-off-by: David Nind Signed-off-by: Laura_Escamilla Signed-off-by: Brendan Lawlor Signed-off-by: Lucas Gass commit 199cdbd34aad5e2428bb80d361406b412a6d126d Author: Owen Leonard Date: Tue Feb 10 08:20:07 2026 -0500 Bug 41807: Fix automatic tab selection on basket groups page This patch fixes the JS in the basket groups template which is intended to select the "Closed" tab when a "listclosed" parameter is passed. To test, apply the patch and go to Acquisitions. - Search for and view a vendor. - Click "Basket groups" in the sidebar. - Create a new basket group if necessary. - Click "Delete" to remove the basket group. - When the page reloads the "Closed" tab should be selected. - Create a new basket group if necessary and click "Close and export as PDF." When the page reloads the "Closed" tab should be selected. - Click "Reopen." The "Closed" tab should again be selected. The patch doesn't make any changes to existing behavior but I think we should re-evaluate whether the "Closed" tab is the right place to go after deleting or reopening a basket group. Sponsored-by: Athens County Public Libraries Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 7f3868218439d78fddaf9a2db864bb410c0de5e6 Author: Hammat Wele Date: Fri Jan 23 12:53:45 2026 +0000 Bug 41692: "See all charges" link in the guarantor details does not activate Guarantees charges tab When a member has guarantees and the guarantees have charges/fines, the link "See all charges." in the guarantor details does not work. It should activate the "Guarantees’ charges" tab and display the guarantee’s charges. Steps to Reproduce 1. Find or create a patron with the 'Kid' category. 2. Add a guarantor for this patron. 3. Go to Accounting and create a manual invoice without paying it. 4. Open the guarantor details page. 5. Click on "See all charges." ==> it does nothing. 6. Apply the patch 7. Repeat step 4, 5 ==> The "Guarantees’ charges" tab is activate Signed-off-by: Owen Leonard Signed-off-by: Laura_Escamilla Signed-off-by: Lucas Gass commit ecd2f81c75fa43cdc05a975333bdc2674ed0601a Author: Brendan Lawlor Date: Tue Sep 9 14:58:13 2025 +0000 Bug 21555: Disable merge patrons button when using select all This patch disables the merge patrons button when select all is clicked. The button is re-enabled after clicking clear all or manually changing the selection. To test: 1. Do a patron search 2. Select at least 2 patrons 3. The merge patron button is enabled 4. Click select all 5. The merge patron button is still enabled 6. Apply patch and refresh browser 7. Click select alll 8. The merge patron button is not enabled anymore 9. Change the selection manually 10. Confirm the merge patron button is re-enabled Sponsored-by: CLAMS Signed-off-by: Emmi Takkinen Signed-off-by: Laura_Escamilla Signed-off-by: Lucas Gass commit d96183d41b102246d4869b54286a39a0bdb177bb Author: Kevin Carnes Date: Tue Feb 24 13:15:05 2026 +0100 Bug 41496: Update current URL for item search The "Copy shareable link" button on the item search table creates a link based on the current URL, but an item search does not update the current URL with the search parameters. This patch copies the code to generate the URL with search parameters and uses it to update the current URL. Test plan: 1. Click "Item search". 2. Perform an item search (e.g. Home library is Centerville). 3. Click the "Copy shareable link" button on the right side of the screen above the table. 4. Paste and visit the link. 5. Observe that you only see the search page without any results. 6. Apply patch. 7. Repeat steps 1-4. 8. Observe that you see the results with the table settings. 9. Sign off. Sponsored-by: Lund University Library Signed-off-by: Andrew Fuerste Henry Signed-off-by: Laura_Escamilla Signed-off-by: Lucas Gass commit fccbf3099db544fc024d11a2342465748dae59f7 Author: David Cook Date: Tue Mar 3 01:36:22 2026 +0000 Bug 41970: Fix typo in pa_class in template This change fixes a typo from pa_loo to pa_class, so that the ID attribute of the fieldset is properly set when using PA_CLASS to group patron attributes. Test plan: 0. Set up two PA_CLASS values 1. Set up two patron attributes which are viewable/editable on the OPAC and assign them one class each 2. Go to http://localhost:8080/cgi-bin/koha/opac-memberentry.pl 3. Look at the HTML and note that fieldsets for both PA classes have the ID of "aai_" 4. Apply the patch 5. Reload the page http://localhost:8080/cgi-bin/koha/opac-memberentry.pl 6. Note that now the fieldsets have ID attributes of "aai_". 7. Rejoice as now it's easier to use Javascript and CSS and have valid HTML! Signed-off-by: Roman Dolny Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 537435659f2cffb3c102069f3253c1072e4bad54 Author: David Nind Date: Fri Feb 27 21:59:59 2026 +0000 Bug 41885: (follow-up) Rename iso2709 to MARC for list downloads Rename iso2709 to MARC in the list of download options for lists in the staff interface. Signed-off-by: David Nind Signed-off-by: Lucas Gass commit 113d290ace73ede1eab0b69498efdbe19a0f9151 Author: Katrin Fischer Date: Mon Feb 23 10:19:34 2026 +0000 Bug 41885: Rename list download option in staff interface to 'MARC' This makes the name match the other places in staff interface and OPAC where we allow download of MARC records (OPAC lists and cart, staff cart). To test: * Create a list in staff with at least one record in it * Check the download options offer 'iso2709' * Apply patch * Verify the name of the option has changed to 'MARC' * Verify the same name is used for the download options of the list in the OPAC Signed-off-by: Gretchen Maxeiner Signed-off-by: David Nind Signed-off-by: Lucas Gass commit 1058fe254c5d9ff98fc34c5ad1a4d80bd85082cb Author: Roman Dolny Date: Mon Jan 26 22:12:10 2026 +0000 Bug 41715: Argument "YYYY-MM-DD" isn't numeric in numeric lt (<)... warnings in issues_stats.pl The warnings: [WARN] Argument "YYYY-MM-DD" isn't numeric in numeric lt (<) at /kohadevbox/koha/reports/issues_stats.pl line 224. appears in the plack-intranet-error.log. It happens because a numerical comparison was used to compare the dates instead of a string comparison. To test: ======== 1. Observe plack-intranet-error.log. 2. In staff interface go to Reports > Statistics wizards > Circulation. 3. Select date "From" and date "To" then submit. 4. Two warnings appear in plack-intranet-error.log. 5. Apply the patch; restart_all. 6. Repeat 2-3. No warnings appear in log. Sponsored-by: Ignatianum University in Cracow Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 9dee981687286051f9653a64fda2de4371d56a5a Author: Owen Leonard Date: Thu Feb 12 09:34:45 2026 -0500 Bug 41838: Fix automatic tab selection on MARC subfield edit pages This patch fixes automatic tab selection on MARC subfield edit pages for both authority and bibliographic records. The patch also removes some unused markup and JS associated with old ways of handling tabs. To test, apply the patch and go to Administration -> Authority types. - Click the "Actions" button for one of the authority types and select "MARC structure" - Pick a tag which has multiple subfields, e.g. 020 and click Actions -> Subfields. - Click one of the subfield links (not the first one). On the subfield edit page the corresponding tab should be selected when the page loads. - Go back and click the "Edit" button and confirm that this also selects the correct tab. - Go to Administration -> MARC bibliographic framework -> MARC structure -> View subfields and perform the same tests. Sponsored-by: Athens County Public Libraries Signed-off-by: John Doe Signed-off-by: Nic Olsson Signed-off-by: David Cook Signed-off-by: Lucas Gass commit 9b2f2fcf6ff578498906e1e8bde5108e89fe5f52 Author: David Cook Date: Fri Jan 16 04:03:41 2026 +0000 Bug 41645: Make self-checkout use responsive CSS This change makes the responsive CSS work with self-checkout. This changes also includes a few minor HTML changes to make the display look good both on large and small screens. Test plan: 0. Apply the patch 1. Go to http://localhost:8080/cgi-bin/koha/sco/sco-main.pl 2. Log in as the koha user 3. Check out barcodes 39999000004571 and 39999000001310 4. In an incognito window, add holds and charges for the koha user 5. Go back to http://localhost:8080/cgi-bin/koha/sco/sco-main.pl and log in as the koha user 6. Using your F12 dev tools, look at the interface with different widths 7. Note that the datatables have a responsive design which looks good on a mobile view 8. Note that the page stays contained to the small screen size and you don't have to scroll horizontally to see all the content Signed-off-by: David Nind Signed-off-by: Baptiste Wojtkowski Signed-off-by: Lucas Gass commit 28b479d114ebe85f343a0dce744c7ec266076442 Author: Roman Dolny Date: Fri Feb 20 19:25:44 2026 +0000 Bug 41904: "Use of uninitialized value..." warning in del_message.pl The warning [WARN] Use of uninitialized value in string eq at /kohadevbox/koha/circ/del_message.pl line 54. appears in plack-intranet-error.log Test plan: ========== 1. Observe plack-intranet-error.log 2. Search for any patron and go to "Check out" tab. 3. Add message for patron. Added message is shown in "Message" area with "Edit" and "Delete" links. 4. Click "Delete" and confirm modal. 5. Warning appears in plack-intranet-error.log 6. Apply the patch; restart_all 7. Repeat 3-4. No warning appears. Sponsored-by: Ignatianum University in Cracow Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 7fdf10b9ad089345bfdeecd84df795cdb18ff800 Author: Jonathan Druart Date: Fri Jan 9 12:13:30 2026 +0100 Bug 41558: Fix and standardize links to tab on opac-user We have different implemented solution to select a tab on opac-user: * a "tab" variable (from bug 37972), it's never used * several variables passed from the controller to the template, depending on the tab to select (it works and is used) * use of anchors (it does not work and is used) We should fix and standardize it. I've linked to several reports that seem to conflict with each others. This patch suggests to have a "tab" variable Test plan: Confirm that the different links to tab to opac-user are not using a query parameter to pass the tab to select, e.g. from the opac-main page. Signed-off-by: Paul Derscheid Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 036d92e6549b06ef62a55a54d840df500d3adbd7 Author: Nick Clemens Date: Wed Nov 26 16:29:12 2025 +0000 Bug 41316: Use patrons homelibrary for selecting overdues that should be sent Currently the patron homelibrary option for OverdueNoticeFrom will select overdues for a branches triggers based on the issuing branch The other two options select the trigger/overdues based on the selection This patch alters the selection of overdues to match only for the patrons branch To test: 1 - Apply 41315 and follow the plan there 2 - Apply this bug and run the overdues script, assuming CPL is branch A: perl misc/cronjobs/overdue_notices.pl --triggered --library CPL --test --nomail -v -v 3 - No overdues should be triggered 4 - Run the script for one of the patrons home libraries, in my case MPL perl misc/cronjobs/overdue_notices.pl --triggered --library MPL --test --nomail -v -v 5 - Note only overdues for patrons from that branch are triggered Signed-off-by: Ben Daeuber Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 0b7c7eab865c5986cca491dbe72163080b7c3541 Author: Owen Leonard Date: Thu Jul 31 11:41:00 2025 +0000 Bug 40568: Various corrections to recalls templates This patch makes various minor changes to recalls templates. - Correct sorting of dates in tables - Wrap recalls table in "page-section" div. - Hide "Show old recalls" if there are no recalls. To test, apply the patch and enable Recalls if necessary. - If necessary, place some recalls. - Check the sorting of date columns on the "Recalls queue" page. It should be correct. - View a patron who has never placed a recall. Go to their recalls history and confirm that you see a "Patron has no recalls" message but no "Show old recalls" checkbox. Sponsored-by: Athens County Public Libraries Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 4996ea86913c01811e551eb98528b878c700cbd9 Author: Baptiste Wojtkowski Date: Wed Aug 27 11:40:40 2025 +0000 Bug 40711: Fix valuebuilder for UNIMARC 181c and 2 Test plan (UNIMARC ONLY): 1 - Make sure you have valuebuilder enabled for 181$c and 181$2 (see hereafter) 2 - Edit any record. Use valuebuilder to set 181$c to "cri - cartographic image", notice there is no change 3 - Use valuebuilder to set 181$c to "crm - cartographic moving image", notice it is set to "a" 4 - Open the valuebuilder for 181$2 and inspect the body ID. See it is cat_unimarc_field_182-2. 5 - Apply patch 6 - Repeat 2&3 and notice the codes are now cri respectively cri and crm 7 - Open the valuebuilder for 181$2 and inspect the body ID. See it is cat_unimarc_field_181-2. Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 7f8f5cbb5c7e1477dd3de8777fc9cf882801c54c Author: Marcel de Rooy Date: Fri Feb 27 09:32:23 2026 +0100 Bug 41444: (QA follow-up) Rearrange comments It would be at least helpful to add a reference to get_transfer here, since we are replacing it here. Used the opportunity to update the older comments Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 13d2eb3d1b0ca5b402516fdef85c83290b542587 Author: Nick Clemens Date: Fri Dec 12 20:18:26 2025 +0000 Bug 41444: Search for transfers directly This patch removes a fetch of the item object followed but get_transfer to simply search the transfers by itemnumber and status To test: 1 - Add many items to your records https://github.com/kidclamp/handy-koha-script/blob/main/randitems.pl NOTE: this script makes a lot of items withdrawn or damaged, undo that for more dramatic difference UPDATE items SET withdrawn=0,damaged=0 perl misc/search_tools/rebuild_elasticsearch -v 2 - Set Koha system preferences to display more results and check more items: maxItemsInSearchResults 60 numSearchResults 50 3 - Do a search, several times, note the time it takes 4 - Apply patch, restart all 5 - Repeat search several times, note the time it takes 6 - Confirm it is better after the patch Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 5779eec49bd85e38c192e3034b9829b9a1d1298f Author: Kyle M Hall Date: Fri Apr 25 10:26:13 2025 -0400 Bug 39749: RestrictPatronsWithFailedNotices should not trigger for DUPLICATE_MESSAGE failures Koha is built to prevent sending duplicate notices. Notices with static language ( e.g. "You have one or more holds ready to pick up" ) will easily trigger this filter. RestrictPatronsWithFailedNotices should ignore these notices because they do not indicate any problem with contacting the patron. Test Plan: 1) Enable RestrictPatronsWithFailedNotices 2) Enqueue to identical notices for a patron 3) Run process message queue to send one and fail the other as a duplicate ( alternately, just modify them in the database ) 4) Run restrict_patrons_with_failed_notices.pl 5) Note the restriction 6) Remove the restriction 7) Apply this patch 8) Run restrict_patrons_with_failed_notices.pl 9) Note that no restriction was created! Signed-off-by: Marion Durand Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 3d99867f60ff72866f31c840b8c70d36a5422a59 Author: Lucas Gass Date: Thu Mar 5 14:59:03 2026 +0000 Bug 23260: DBIC Signed-off-by: Lucas Gass commit c88a86d0af9277fb53bd074a888b9bbe69725b3c Author: Lucas Gass Date: Thu Mar 5 14:49:00 2026 +0000 Bug 23260: DBRev 25.12.00.028 Signed-off-by: Lucas Gass commit 599286cf4040cf533ee55c4cff80aad5dd662406 Author: Martin Renvoize Date: Fri Jan 30 11:01:37 2026 +0000 Bug 23260: (QA follow-up) Validate AnonymousPatron preference value Add validation to ensure AnonymousPatron preference contains a valid borrowernumber before attempting to use it in the anonymization process. This prevents foreign key constraint errors and orphaned records if the preference contains an invalid value (non-existent borrowernumber, string instead of number, etc.). Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit c074c66d51f45fc93f710ec1ed9ab4d949c21e80 Author: Martin Renvoize Date: Fri Jan 30 10:58:00 2026 +0000 Bug 23260: (QA follow-up) Optimize anonymize_last_borrowers to avoid N+1 queries This commit refactors Koha::Patrons->anonymize_last_borrowers() to use a single bulk UPDATE instead of looping through patrons individually. Performance Problem: ------------------- The original implementation had a severe N+1 query problem: 1. Query all patrons with items_last_borrower records 2. Loop through each patron (First N+1) 3. For each patron, search their items_last_borrowers (Second N+1) 4. Update each result set For a library with 10,000 patrons and 100,000 items, this would execute 20,000+ database queries when run as a cronjob. The Fix: -------- Query the items_last_borrower table directly with all conditions in a single search, then perform one bulk UPDATE: $schema->resultset('ItemsLastBorrower')->search({...})->update({...}) This reduces execution from potentially thousands of queries to a single SQL UPDATE statement, regardless of data volume. Why This Pattern: ----------------- While Koha::Objects->update() exists, it loops through records individually if the object class has update()/store() methods, unless {no_triggers => 1} is passed. Working directly with the resultset guarantees bulk update behavior. This pattern is used throughout Koha for bulk operations (see Koha/Item.pm, Koha/Hold.pm, admin/koha2marclinks.pl, etc). Testing: -------- prove t/db_dependent/Koha/Patrons.t All existing tests pass, confirming identical behavior with dramatically improved performance. Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 2d75cac7d102ed323159981e70fe2d0756148e0a Author: Lucas Gass Date: Thu Jan 29 21:39:59 2026 +0000 Bug 23260: Fix database update Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit a37d887df6539cc888c46edc252c7d2d47b318b0 Author: Lucas Gass Date: Thu Jan 29 21:32:24 2026 +0000 Bug 23260: Fix kohastructure.sql Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit fde40177fa3d5013552e6be8dc2122ee9a92ed3e Author: Lucas Gass Date: Thu Sep 25 19:33:34 2025 +0000 Bug 23260: Update cron to exit if AnonymousPatron is not set Signed-off-by: Peter Moore Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 9165c0fa4b5bf81e7b0df8ced48779a598a22d53 Author: Lucas Gass Date: Thu Sep 25 19:32:28 2025 +0000 Bug 23260: Fix DB update to NOT allow for NULL borrowernumber Signed-off-by: Peter Moore Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit f0d4240ee22e76668ee0d22808785e8d29b2f36d Author: Andrew Fuerste-Henry Date: Wed Sep 24 20:16:56 2025 +0000 Bug 23260: (QA follow-up) Prevent use of cronjob when AnonymousPatron not set To test: 1 - configure StoreLastBorrower but not AnonymousPatron 2 - perl misc/cronjobs/anonymize_last_borrowers.pl -c 3 - the cron tells 'Preference 'AnonymousPatron' must be enabled to anonymize item's last borrower' 4 - put a value in AnonymousPatron 5 - repeat 2 6 - cron runs good Signed-off-by: Peter Moore Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 7eda8d23fae696dfbbe8672f18df52f71ec4847b Author: Lucas Gass Date: Tue May 6 21:53:35 2025 +0000 Bug 23260: Add a confirm flag To test the confirm flag: 1. Run perl misc/cronjobs/batch_anonymise.pl --days 1 2. Notice the warning about needing a confirm flag 3. Run perl misc/cronjobs/batch_anonymise.pl --days 1 --confirm 4. The script runs Signed-off-by: Peter Moore Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit ecfd85ebb88449b68d2396412a66760224f580c2 Author: Nick Clemens Date: Tue Nov 28 13:31:13 2023 +0000 Bug 23260: Add cronjob anonymize_last_borrowers.pl This patch adds the feature to anonymize patrons from items_last_borrower table. This code is run from batch_anonymize script, which is triggered from a new cron job anonymize_last_borrowers.pl To test: 1) apply this patch and the previous ones 2) perl installer/data/mysql/updatedatabase.pl 3) set StoreLastBorrower preference to Allow. 4) set AnonymousPatron preference to a valid patron id 5) Create a Check out followed by a Check in. CHECK => a row should appear in items_last_borrower table with the borrower and the item number. 6) In mysql, update created_on of items_last_borrower and returndate of old_issues to two days earlier. 7) perl misc/cronjobs/anonymize_last_borrowers.pl CHECK => borrower number in items_last_borrower is not anonymized yet. 8) Repeat step 5 and 6 but instead of two days earlier, set the new entry in items_last_borrower to three days earlier. 9) set AnonymizeLastBorrower to 'Anonymize' and AnonymizeLastBorrowerDays to 2 days. 10) perl misc/cronjobs/anonymize_last_borrowers.pl SUCCESS => borrower number in items_last_borrower changed to AnonymousPatron id 11) repeat step 8 12) set AnonymousPatron preference to 0 13) perl misc/cronjobs/anonymize_last_borrowers.pl SUCCESS => borrower number in items_last_borrower changed to null 14) prove t/db_dependent/Koha/Patrons.t Signed-off-by: Martin Renvoize Signed-off-by: Kyle M Hall Signed-off-by: Peter Moore Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 39ce85bf843c2038e010a67ea71677e32c50411c Author: Nick Clemens Date: Tue Nov 28 13:30:45 2023 +0000 Bug 23260: Unit tests Signed-off-by: Martin Renvoize Signed-off-by: Kyle M Hall Signed-off-by: Peter Moore Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass