commit 85007aa6cefaabe160a10ac2567725e1dcf70e96 Author: Jake Deery Date: Wed Apr 29 09:55:10 2026 +0100 Bug 14962: DBIC - DO NOT PUSH commit 7a290697020a457d81c8c734df9801e8e57401f1 Author: Jake Deery Date: Wed Apr 29 12:34:19 2026 +0100 Bug 14962: atomicupdate - DO NOT PUSH commit 15e46b5c0926c1f1195dec79e492a1e164f54626 Author: Jake Deery Date: Mon Dec 8 16:22:40 2025 +0000 Bug 14962: On Display Cypress e2e tests This patch contains the front-end tests for the On Display module. If you'd like to verify the Perl methods, see the perl test harness patch. You can also use the test plan below to test the entire patchset works as expected. TO TEST (AUTOMATED E2E): APPLY PATCHSET a) cd $PROJECTS_DIR/koha b) DB_HOSTNAME=localhost npx yarn cypress open *) you may need to run `corepack enable` if you get "command not found" c) click E2E testing d) click start E2E testing in Electron e) under Display, click Main.ts *) verify it runs through fully with green f) return to last page, under Display, click Displays_spec.ts *) verify it runs through fully with green SIGN OFF TO TEST (MANUALLY): APPLY PATCHSET a) go to /cgi-bin/koha/display/display-home.pl *) notice module is disabled b) go to /cgi-bin/koha/admin/preferences.pl?tab=&op=search&searchfield=UseDisplayModule *) set UseDisplayModule syspref to "Use" c) repeat step a *) notice module is now enabled d) click "New display" e) Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit c8906d5b6bec161bea857eedcf2f32cadc7c24ab Author: Jake Deery Date: Tue Dec 2 09:16:05 2025 +0000 Bug 14962: On Display perl tests This bug provides the test harness for Bug 14962's new perl methods. The front-end tests are contained within the Cypress tests patch, and you should review the commit message for that patch for end-user test steps. TO TEST: APPLY PATCHSET a) run qa -v 2 --more-tests *) verify everything passes Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 177dadb55191a9d421d26733a186939fcf6fcc13 Author: Jake Deery Date: Mon Oct 5 15:36:21 2026 +0100 Bug 14962: Add new system preferences to HEA This patch adds two new system preferences for Displays to HEA Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions commit 1bc6ddeb7cb701bb43c6090f184e6bf5dd2c19b0 Author: Jake Deery Date: Wed Apr 29 12:29:54 2026 +0100 Bug 14962: On Display changes for SQL This patch contains the required schema changes that will enable On Display to function as a new module. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 368adc4b4a37d9c5787ac6ee44c80e713edb9afd Author: Jake Deery Date: Mon Dec 1 14:47:58 2025 +0000 Bug 14962: On Display code for OPAC scripts & templates This patch makes the necessary changes to the OPAC to make sure effective locations, collection codes, and branches are correctly displayed. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit db19d2ab7f52afbeac013df077885ec3ae0ce223 Author: Jake Deery Date: Tue May 26 14:22:02 2026 +0100 Bug 14962: On Display code for Intranet scripts & templates This patch makes the necessary changes to the Intranet to make sure effective locations, collection codes, and branches are correctly displayed. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 06ff92c38672095055445ef9b141a0ea2d132615 Author: Jake Deery Date: Tue May 26 14:21:31 2026 +0100 Bug 14962: On Display code for new Vue app This patch adds the On Display Vue app. Please make sure you rebuild your JavaScript prior to testing this patch. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 8ee506a0a808268a930d74b759c27a7439bdc28c Author: Jake Deery Date: Tue May 26 14:20:20 2026 +0100 Bug 14962: On Display code for API Clients This patch adds the required API clients for use with the On Display module. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 1963c771144c674f59ffd76f26a22eced5d39838 Author: Jake Deery Date: Wed Apr 29 12:30:01 2026 +0100 Bug 14962: On Display code for svc API This patch updates svc/checkouts to factor in updates to the checkout process, caused by addition of the effective locations, collection codes, and branches. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 2c24f8984262ff0da29ead3620cd7e62bd481c43 Author: Jake Deery Date: Mon Dec 1 13:12:59 2025 +0000 Bug 14962: On Display code for REST API This patch adds all the various API endpoints, and modifies a few existing API endpoints, in preparation for the On Display Vue app Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 6c823aca102f0adaf1c9bdf839bdf2a1b4589e1d Author: Jake Deery Date: Mon Dec 1 13:16:04 2025 +0000 Bug 14962: On Display code for new Koha modules This patch contains new code found in the On Display module. Be sure to rebuild the DBIC modules, prior to pushing. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit ba7f160c81a31afa85040e57b9b29b2bb4f5e13b Author: Jake Deery Date: Mon Dec 1 13:06:40 2025 +0000 Bug 14962: On Display code for existing Koha modules This patch adds code for the On Display module, found in the existing Koha modules. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit fdf3ce83f6afa96f0dfc5b96502821179616d0ee Author: Jake Deery Date: Mon Dec 1 13:09:20 2025 +0000 Bug 14962: On Display code for BackgroundJobs This patch adds code required to make BackgroundJobs accept and process batch addition and removal of items to and from displays. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 7edf91f65e89bf6f58673cd4b253a0c3fb96cffc Author: Jake Deery Date: Mon Dec 1 14:24:33 2025 +0000 Bug 14962: On Display config changes for Vue This patch contains config changes to enable the new On Display Vue app to work. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit 7ce88bb5a957d7958d02938b27d22437ceba7175 Author: Jake Deery Date: Mon Dec 1 14:31:30 2025 +0000 Bug 14962: On Display config changes for tables This patch adds the Display column to a number of tables, ready for the On Display module. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit aba0e0fa481ce9572feaf7e2b1a13110817b9777 Author: Jake Deery Date: Mon Dec 1 14:28:55 2025 +0000 Bug 14962: On Display changes to build suite This patch contains the essential changes required to get Koha to build the correct JavaScript and Vue modules for the new On Display module. Please see the test files commit for instructions on how to test this bundle of patches. Sponsored-by: ByWater Solutions Signed-of-by: Martin Renvoize Signed-off-by: Emily Lamancusa commit e3f93d6d5963d1031623ca6176fc24c70a20d781 Author: Jake Deery Date: Tue May 26 14:19:40 2026 +0100 Bug 14962: Add breakAfter as option on Vue FormElement This patch adds the ability to add a linebreak after form elements in Vue, to facilitate form element grouping. == TO TEST == a) apply the rest of Bug 14962 b) confirm that on cgi-bin/koha/display/displays/add there is spacing after groups of form fields within a group of form elements == SIGN OFF == Sponsored-by: ByWater Solutions Signed-off-by: Emily Lamancusa commit 923c81b89b737faf970f405a9df1df7bf15577b5 Author: Jake Deery Date: Tue May 26 14:18:37 2026 +0100 Bug 14962: Add show action as KohaTable option This patch adds a show action option which can be used in Vue KohaTables. This has future implications for Vue as a more granularly controlled facet of Koha. == TO TEST == a) apply all of Bug 14962 b) enable UseDisplayModule syspref c) create a user with only access to the staff client and view_displays d) create a display at /cgi-bin/koha/display/displays/add e) login as the user you just created f) go to /cgi-bin/koha/display/displays g) notice how the list table only shows a Show action on the right-hand side of the table row == SIGN OFF == Sponsored-by: ByWater Solutions Signed-off-by: Emily Lamancusa commit 2ecdee9c8179b52f6481eed0be98bb83d8c047ce Author: Jake Deery Date: Mon Jun 15 08:59:24 2026 +0100 Bug 14962: Factor missing permissions into http-client This patch ensures when required_permissions comes back in an API response, a proper message is displayed to the user, listing out what permissions are missing. == TO TEST == a) create a user with only permission to access the staff client, and manage_budgets under acquisitions b) login as this user c) go to /cgi-bin/koha/acquisition/vendors?supplier= d) notice the unhelpful 'Error: Authorization failure. Missing required permission(s).' == APPLY PATCH == e) repeat steps c-d f) notice there is now a dump of the json returned by the api == SIGN OFF == Possible follow-up work: we should sort the API's required_permissions response out so it returns a predictable and sensible output that can have translatable strin gs attached to it, so we can stop dumping the raw JSON out and start providing a human-readable permission description. Sponsored-by: ByWater Solutions Signed-off-by: Emily Lamancusa commit 39a6f167ffbcbe87899f439961b02bb296314ee1 Author: Olivia Reynolds Date: Tue Oct 6 14:51:39 2026 +0000 Bug 43739: Disambiguate report templates by transport type As the report template dropdown offers each message transport type for a give notice, this can lead to duplicate entries with no way to tell them apart. This patch disambiguates each entry by appending the transport type. Test plan: 1. Ensure Bug 43736 is already applied. 2. Under Tools > Notices and Slips, create a new notice in the Reports module. Choose a code and a name, and add distinct subjects and contents for both Email and Print. For example, "Email: [% today %]" and "Print: [% today %]". 3. Under Reports, create a new report from SQL with a name and the following query: SELECT 1; 4. Open the "Run with template" dropdown for the report, and verify you see the name of your created notice twice, with no way to distinguish them. 5. Apply patch and refresh. 6. Open the "Run with template" dropdown for the report, and verify you see the name of your created notice twice, each also including their transport type. 7. Verify that running each template version produces the correct corresponding output for its transport type. Sponsored-by: Open Fifth Signed-off-by: Barbara Johnson Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 21e1d5ec1193e23db0de67e2d1bf612da9edcbe1 Author: Olivia Reynolds Date: Tue Oct 6 14:49:49 2026 +0000 Bug 43736: Restore existing report template selection Bug 38621 changed report templates to be based off of the code. This meant we lost the functionality of choosing between the email and print versions of each template. This restores the previous behaviour, where all report templates were displayed and keyed by ID. Test plan: 1. Under Tools > Notices and Slips, create a new notice in the Reports module. Choose a code and a name, and add distinct subjects and contents for both Email and Print. For example, "Email: [% today %]" and "Print: [% today %]". 2. Under Reports, create a new report from SQL with a name and the following query: SELECT 1; 3. Open the "Run with template" dropdown for the report, and verify you see the name of your created notice twice. 4. Run each of the two versions of your notice, and verify they both run the Email version. 5. Apply patch and refresh. 6. Verify there are still two versions of your notice in the dropdown. 7. Verify that one version of the notice runs the Email template, and the other the Print template. 8. Verify that using the Download dropdown and selecting "Rendered template" for each version of the notice produces a downloaded file with the correct rendered contents. Sponsored-by: Open Fifth Signed-off-by: Barbara Johnson Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 598d5e97d7725cc3a9b3dca41f0093969cbc1655 Author: Pedro Amorim Date: Thu Oct 1 11:23:05 2026 +0000 Bug 43674: (follow-up) Declare ISO 18626 version 2021-3 Koha's ISO 18626 messages follow the 2021-3 schema, but the envelope declared version 1.2 and the controller POD cited the v1.2 XSD. Test plan: 1) Apply patch and restart_all 2) Enable the ILLModule system preference 3) Run: curl -s -X POST http://localhost:8081/api/v1/public/ill/iso18626 \ -H "Content-Type: application/xml" \ -d '
1
' 4) Note the response is wrapped in (the BadlyFormedMessage errors are expected, the request above is deliberately minimal) 5) prove t/db_dependent/Koha/ILL/ISO18626.t t/db_dependent/api/v1/iso18626/request.t Co-Authored-By: Claude Opus 5.5 Signed-off-by: Phan Quang Minh Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit f427429f55eb00255600cfd1606a8dc977911d8b Author: Pedro Amorim Date: Wed Sep 30 15:51:50 2026 +0000 Bug 43674: Wrap request.t test data in the ISO18626Message envelope The request, requestingAgencyMessage and mocked partner confirmation test data now use the ISO18626Message envelope, in the ISO 18626 namespace, instead of bare messages in a placeholder namespace. Test plan: 1) prove t/db_dependent/api/v1/iso18626/request.t Co-Authored-By: Claude Opus 5.5 Signed-off-by: Phan Quang Minh Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit a7ca37b4ae98f358ddab2c09735e3412b856e6eb Author: Pedro Amorim Date: Wed Sep 30 11:32:15 2026 +0000 Bug 43674: Wrap ISO 18626 messages in the ISO18626Message envelope ISO 18626 requires every message to be wrapped in an ISO18626Message element, in the ISO 18626 namespace, with a version attribute. Koha sent and expected the bare message, so schema-conformant partners rejected it. Koha now wraps outgoing messages and unwraps incoming ones. Unwrapped messages are still accepted. Test plan: 1) Apply patch and restart_all 2) Enable the ILLModule system preference 3) Run: curl -s -X POST http://localhost:8081/api/v1/public/ill/iso18626 \ -H "Content-Type: application/xml" \ -d '
1
' 4) Note the response is wrapped in (the BadlyFormedMessage errors are expected, the request above is deliberately minimal) 5) prove t/db_dependent/Koha/ILL/ISO18626.t t/db_dependent/api/v1/iso18626/request.t Co-Authored-By: Claude Opus 5.5 Signed-off-by: Phan Quang Minh Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit 034db09c74bf7f49b23ce317cf08f97de46c5698 Author: Tomás Cohen Arazi Date: Fri Aug 7 12:30:09 2026 -0300 Bug 43196: Reject malformed MARC records in PUT /biblios MARC::Record parsers silently return empty records on invalid input: - new_from_mij_structure(undef) returns a blank record (MiJ) - new_from_usmarc(garbage) returns a blank record with warnings - new_from_xml(valid-but-empty) returns a blank record The PUT /biblios endpoint passed these blank records to ModBiblio, which overwrote existing bibliographic data with an empty record (only system-generated 005 and 999 fields survive). Wrap each parser call in try/catch (for MARCXML which dies on malformed XML) and validate the resulting record has at least one field before proceeding. Return 400 if parsing fails or produces an empty record. Note: MARC::Record::MiJ upstream has been patched to croak on undef/invalid input (perl4lib/marc-perl#28), but Koha needs this defensive check regardless for USMARC and empty-but-valid cases. Test plan: 1. Apply the regression tests from the previous commit 2. Run: $ prove t/db_dependent/api/v1/biblios.t => FAIL: put() malformed body tests fail 3. Apply this patch 4. Repeat step 2 => SUCCESS: Tests pass! 5. Sign off :-D Signed-off-by: Tomás Cohen Arazi Signed-off-by: David Nind Signed-off-by: Emily Lamancusa Signed-off-by: Pedro Amorim commit 32b830799c0af4956583b7abb2e4f4352b9077f7 Author: Tomás Cohen Arazi Date: Fri Aug 7 11:38:35 2026 -0300 Bug 43196: Regression tests for PUT /biblios with malformed bodies MARC::Record::new_from_mij_structure silently returns an empty record when passed undef or an invalid structure. The PUT /biblios endpoint does not validate the parsed record before calling ModBiblio, resulting in a 200 response for clearly invalid input. This patch adds regression tests for all three supported content types: - application/marc-in-json: truncated JSON, invalid structure, empty fields - application/marcxml+xml: truncated XML, empty record - application/marc: garbage input All should return 400 but currently return 200. Note: MARC::Record::MiJ upstream should arguably croak on undef/invalid input rather than returning a blank record. Test plan: 1. Apply patch 2. Run: $ prove t/db_dependent/api/v1/biblios.t => FAIL: put() malformed body tests fail (200 instead of 400) 3. Sign off :-D Signed-off-by: Tomás Cohen Arazi Signed-off-by: David Nind Signed-off-by: Emily Lamancusa Signed-off-by: Pedro Amorim commit 11d6ce122dec0930302ac29aa219ad180213c304 Author: Thibaud Guillot Date: Thu Sep 24 16:20:27 2026 +0200 Bug 32542: (QA follow-up) Use constants for cover image wait timeout and tidy files Signed-off-by: Baptiste Wojtkowski Signed-off-by: Pedro Amorim commit 1cd449dcca5c5bd8e2ba1c6cde5a925c32ec736c Author: Tadeusz „tadzik” Sośnierz Date: Mon May 11 15:33:18 2026 +0200 Bug 32542: Await all image loads before setting coce.done Signed-off-by: Jan Kissig Signed-off-by: Baptiste Wojtkowski Signed-off-by: Pedro Amorim commit 811ead8d5f290ab555c0edb4a37029afcb30a87b Author: Nick Clemens Date: Tue Sep 23 19:02:03 2025 +0000 Bug 32542: Add 'wait_for_images' to results.js' Signed-off-by: Jan Kissig Signed-off-by: Baptiste Wojtkowski Signed-off-by: Pedro Amorim commit f4eb7647456131d32b844ad0bf4cf268afdf29e8 Author: Pedro Amorim Date: Fri Sep 25 11:18:39 2026 +0000 Bug 42810: [ALTERNATIVE] Show self-renewal information message field on new categories Pass [""] instead of [] for new categories so one empty field is rendered. Test plan (before applying this patch): 1. Go to Administration > Patron categories > New category: http://localhost:8081/cgi-bin/koha/admin/categories.pl?op=add_form 2. Scroll to 'Account expiry and self-renewal'. Note there is no 'Self-renewal information message' field 3. Apply patch, restart plack 4. Repeat 1 and 2. Confirm the field is now shown 5. Click 'New' once, fill in both messages and the other required fields, save 6. Edit the new category. Confirm both messages are shown Co-Authored-By: Claude Opus 5.5 Signed-off-by: Owen Leonard Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit 5cffaf3cdf2cc88ce38884b3fc2ad7b93a7e5271 Author: Matt Blenkinsop Date: Mon Aug 24 10:02:23 2026 +0100 Bug 43361: Prevent subscription orders from being included in invoice item counts Test plan: 1. Go to /cgi-bin/koha/acquisition/vendors/1. Click "New" → "Basket", name it, "Save". 2. "Add to basket" → "From a new (empty) record". Fill Title, Quantity=1, Fund, Vendor price=100, "Save". 3. Click "Close basket", confirm. 4. "My Vendor" breadcrumb → "Receive shipments" → type any "Vendor invoice" name → "Next". 5. Click "Receive" on the order row. Set Quantity received=1, check "Receive?", confirm Actual cost ≠ 0, "Confirm" → "Finish receiving". 6. "My Vendor" → "Receive shipments" again. Note the Item count and Items expeected for your invoice. 7. On that same pending-orders page, click the invoice (should lead you to /cgi-bin/koha/acqui/parcel.pl?invoiceid=1), then click the order's title link directly (under 'Summary' column). Click "New" → "New subscription", fill required fields, "Next", "Save subscription". Repeat once more on that exact record. 8. Reload "Receive shipments": Item count and Items expected for the same invoice are now doubled. 9. Apply patch and restart_all 10. Refresh the page, the invoice counts should now be correct Signed-off-by: John Vinke Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 66d6ca0c23685af81ae7bc6e8eb6545f3bee166f Author: Pedro Amorim Date: Thu Oct 8 09:59:33 2026 +0000 Bug 40294: DBRev 26.06.00.032 Signed-off-by: Pedro Amorim commit 9f0b0bc8b7721ba40672032a7ba9ba8038f9e3a8 Author: Jan Kissig Date: Tue Oct 6 13:41:58 2026 +0000 Bug 40294: (QA follow-up) Fix failing test patrons_self_renewal.t This fixes the randomly failing test patrons_self_renewal.t when a patron is doing a self renewal via API. The called module SelfRenawal creates a letter with - letter_code = "MEMBERSHIP_RENEWED" - is_notice_mandatory = $is_notice_mandatory, - forceprint => 1 The param forceprint will always create a MEMBERSHIP_RENEWED letter with transport 'print'. The param is_notice_mandatory dependends on the patron categories setting enforce_expiry_notice which, if enabled, would trigger the message fallback chain enabled by this bug. This could lead to variable number of messages being generated and made the test fail. Therefore enforce_expiry_notice is disabled for the patron category used in the mentioned test. To test: prove t/db_dependent/api/v1/patrons_self_renewal.t Signed-off-by: Pedro Amorim commit bdba0b95f0d514f3c59abd65fc8c213e2ee41735 Author: Jan Kissig Date: Tue Sep 29 18:01:15 2026 +0000 Bug 40294: (QA follow-up) Fix atomicupdate This removes the literal '\n' in atomicupdate for MEMBERSHIP_RENEWED print notice and changes the output to MEMBERSHIP_RENEWED instead of MEMBERSHIP_RENEWAL. Signed-off-by: Pedro Amorim commit 54abe0af7cc06ae47894ae03e39a9fd12c825df4 Author: Jan Kissig Date: Tue Sep 29 17:47:10 2026 +0000 Bug 40294: (QA follow-up) Fix tests Introduce check for existing notice templates to prevent db constraint. Fix wording to match actual message template. Signed-off-by: Pedro Amorim commit 91001fc6435b883964169fe6f959b87eba7264a9 Author: Jan Kissig Date: Tue Sep 1 06:59:41 2026 +0000 Bug 40294: (QA follow-up): Fix is_notice_mandatory in membership_expiry.pl The flag is_notice_mandatory was determined using grep with the patrons category code against a list of patron categories which have enforce_expiry_notice set to YES. As grep expects the first param to be a regular expression but was given a simple string (f.e. 'S') it returned the count of patron categories which have enforce_expiry_notice set to YES. So when one patron category had a mandatory expiry notice set, all messages where flagged as mandatory. This patch wraps the category code in a regular expression so that grep will only return the number of exact matches. Signed-off-by: Pedro Amorim commit c2398b9b3fcdb830752cff0cdac69e226230e1a1 Author: Emily Lamancusa Date: Tue Jun 30 17:02:59 2026 -0400 Bug 40294: Update tests To test: prove t/db_dependent/Koha/Patrons.t Signed-off-by: David Nind Signed-off-by: Jan Kissig Signed-off-by: Pedro Amorim commit 878ee22bd022cb3ea8fef011e42bc8acdfe5b3e1 Author: Emily Lamancusa Date: Mon Jul 20 12:45:37 2026 -0400 Bug 40294: Add default print notices for existing installations If an existing installation doesn't already have print notice templates defined for MEMBERSHIP_RENEWED and MEMBERSHIP_EXPIRY, add default notice templates to the database. To test: 1. Start a fresh test environment without the patch applied 2. Apply patch and updatedatabase --> Database update should say that print notice templates for MEMBERSHIP_EXPIRY and MEMBERSHIP_RENEWAL were added 3. In the staff interface, go to Tools > Notices and Slips 4. Search for MEMBERSHIP_EXPIRY and click to Edit button 5. Expand Print section --> Confirm the default text has been filled in 6. Make some changes to the Print section and save 7. Repeat steps 4-6 for MEMBERSHIP_RENEWAL 8. updatedatabase again --> Database update should say the print notice templates are already defined and no changes are needed 9. Repeat steps 3-5 for MEMBERSHIP_EXPIRY --> Confirm that the changes you made earlier are still there 10. Repeat steps 3-5 for MEMBERSHIP_RENEWAL --> Confirm that the changes you made earlier are still there Signed-off-by: David Nind Signed-off-by: Jan Kissig Signed-off-by: Pedro Amorim commit 331d85e1ab208eb21e00e676edf08248cf7873cb Author: Emily Lamancusa Date: Tue Jun 30 13:21:01 2026 -0400 Bug 40294: Improve descriptions and add default print notice templates Fix the description for enforce_expiry_date in the API spec Add a hint to the account category administration page about making sure all relevant membership expiration notice templates are defined. Add sample Print notice templates for MEMBERSHIP_RENEWED and MEMBERSHIP_EXPIRY, to ensure those notices will not be missed if the cron job falls back to print notices. Note that these sample notices will only be added for new installs. Signed-off-by: David Nind Signed-off-by: Jan Kissig Signed-off-by: Pedro Amorim commit a98bae5f43a51122d9a9a54c9ae60409cddc8b53 Author: Emily Lamancusa Date: Tue Jun 30 11:09:58 2026 -0400 Bug 40294: Enforce mandatory expiry messages in message queue Enforce that mandatory patron expiry messages will be queued even if the patron does not have a message transport selected (e.g. if expiry notices became mandatory for a patron due to category change or settings change, and their messaging preferences have not been updated yet) If the patron does have at least one transport selected for expiry notices, their selection will be honored. If not, a fallback will be selected depending on which message transports are enabled and what contact information is defined in the patron account. In order of preference, the following transport methods will be considered: 1. email 2. phone 3. sms 4. print To test: 1. Set patron account expiry messages to mandatory for a patron category i. Go to Administration > Patron Categories ii. Click an existing patron category to edit it iii. Under the section, "Account expiry and self-renewal", set "Enforce patron account expiry notice" to Yes iv. Click Save 2. Set the following system preferences: i. Set SMSSendDriver to Email ii. Set PhoneNotification to Enable iii. Set MembershipExpiryDaysNotice to 1 3. Define notice templates for all transport methods of MEMBERSHIP_RENEWED and MEMBERSHIP_EXPIRY i. Go to Tools > Notices and Slips ii. Edit the MEMBERSHIP_RENEWED notice iii. Expand the Phone, Print, and SMS sections iv. Fill in a Message Subject and a Message Body for each tab v. Save the notice template vi. Repeat iii-v for MEMBERSHIP_EXPIRY notice 4. Find or create a patron using the patron category from step 1 5. Edit the patron account and set Expiry date to tomorrow's date 6. Edit the patron's messaging preferences, if necessary, to ensure that nothing is selected for "Patron account expiry" 7. Edit the patron and add the following contact information: i. email address ii. phone number iii. smsalertnumber 8. Run the membership expiry cron job i. ktd --shell ii. perl misc/cronjobs/membership_expiry.pl -v -c 9. Open the patron's Notices tab --> An email notice should have been queued 10. Edit the patron's messaging preferences and text various settings for the "Patron account expiry" preference and re-run the cron job as in step 6 --> New notices should be queued according to the preference settings 11. Edit the patron's messaging preferences to remove all selections for "Patron account expiry" 12. Edit the patron account and delete all email addresses 13. Run the cron again --> a phone notice should have been queued 14. Repeat with various combinations of system preference settings and contact information values in the patron account --> Ensure that the cron always queues a notice, and does not queue any notices that do not make sense based on system preferences and patron account information Signed-off-by: David Nind Signed-off-by: Jan Kissig Signed-off-by: Pedro Amorim commit c817390b5cf3e560c73fc0331de063850bbaf997 Author: Emily Lamancusa Date: Tue Jun 30 10:24:52 2026 -0400 Bug 40294: Show transport preference for mandatory expiry notice Restore the ability to edit the patron messaging preferences for the patron expiration notice when the notice is mandatory. If the patron expiration notice is mandatory for that patron category, it will be labeled as mandatory. Validation to enforce that at least one transport method is actually selected will be added in a follow-up. Signed-off-by: David Nind Signed-off-by: Jan Kissig Signed-off-by: Pedro Amorim commit 92b02b5cef12649ad3843c6e6a61d816ebde54f2 Author: Jonathan Druart Date: Wed Oct 7 07:41:50 2026 +0200 Bug 42295: Fix manager link Previous patch broke the manager link, it mixed backtick and quote Signed-off-by: Pedro Amorim commit b186c6c9532d9ed2983cf3b84f1b5834fff3aac4 Author: Jonathan Druart Date: Mon Aug 24 14:30:13 2026 +0200 Bug 42295: Use vars stored in Koha.prefs Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 4ba54d74a4339c112cd385cacfdfe786b5c15949 Author: Jan Kissig Date: Wed Jul 8 08:26:49 2026 +0000 Bug 42295: (follow-up) Split JS block in format_price.inc (auto tidy) This splits JS into TT and non TT block. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit e71dd4123f8a892a3724c951da4ad1310a3d225e Author: Jan Kissig Date: Wed Jul 8 07:21:44 2026 +0000 Bug 42295: (follow-up) Split JS block in cateditor-widgets-marc21.inc (auto tidy) This puts DefaultCountryField008 and DefaultLanguageField008 to a seperate JS block. The changes affect data in field 008. To test: 1. enable system preference EnableAdvancedCatalogingEditor 2. go to /cgi-bin/koha/cataloguing/editor.pl 3. click Settings -> Show helpers for fixed and coded fields 4. check data in field 008 and console for errors Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 8592cda3a7b5bc5a457110d4e0cfc5e4af6d4535 Author: Jan Kissig Date: Tue Jul 7 12:49:57 2026 +0000 Bug 42295: (follow-up) Split JS block in select_manager.inc (auto tidy) This splits JS into TT and non TT block. To test: 1. open dev tools 2. go to /cgi-bin/koha/suggestion/suggestion.pl and create a suggestion 3. then edit that suggestion - Notify manager should be disabled and unchecked - select a new manager. Notify manager should be clickable now. 4. save and edit again - check that Keep existing manager still works 5. No JS errors are thrown. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 4f2c7d5c4a37d35a463839584bced84dd44f942f Author: Jan Kissig Date: Tue Jul 7 10:35:42 2026 +0000 Bug 42295: (follow-up) Split JS into TT and non TT-block in modal-claims.inc (auto tidy) Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 125ed0b4006845806796e9d9bea65ead229a64d2 Author: Jan Kissig Date: Tue Jul 7 10:19:05 2026 +0000 Bug 42295: (follow-up) Remove data-tt-allowed from script tag in js-patron-get-age.inc (auto tidy) This removes the declaration of const tz as this gets already declared in js-date-format.inc which is always present when js-patron-get-age.inc is included. With no TT interpolation left, the data-tt-allowed flag can be removed from the script tag. RM amended commit title 'Big' -> 'Bug' Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim