commit 92000ef2dfbc700815fe8f13a36e78788e94ddb6 Author: Andrew Nugged Date: Mon Aug 31 13:20:47 2026 +0300 Bug 41809: Preserve waiting hold on other-item checkout When a patron checks out another item from a record with a waiting title-level hold, MoveReserve fills the hold using the checked-out item. This moves the hold to history and detaches the pickup-shelf item, leaving staff without an action to remove it. For a waiting hold, add a cancellation request instead. The hold remains linked to the pickup-shelf item until staff processes the request. Keep the existing fill behavior for non-waiting title-level holds. The regression test models a captured title-level hold and verifies that repeated MoveReserve calls create only one cancellation request. Test plan: Before applying the patch: 1. In Administration > Circulation and fine rules, set "Fill other holds on record" to "Yes" for an item type. 2. Create a record with two available items of that item type. 3. Place a record-level hold for a patron. 4. Open Circulation > Check in. 5. Check in item A. 6. Click "Confirm" to make item A waiting. 7. Open the checkout page for the same patron. 8. Check out item B. 9. Confirm the checkout success message names item B. 10. Confirm "Holds waiting here" no longer lists item A. 11. Open Circulation > Holds awaiting pickup. 12. Confirm "Holds with cancellation requests" does not list item A. Apply the patch. After applying the patch: 1. Create a fresh record with two available items of the same item type. 2. Place a record-level hold for a patron. 3. Open Circulation > Check in. 4. Check in item A. 5. Click "Confirm" to make item A waiting. 6. Open the checkout page for the same patron. 7. Check out item B. 8. Confirm the checkout success message names item B. 9. Confirm "Holds waiting here" still lists item A. 10. Open Circulation > Holds awaiting pickup. 11. Confirm "Holds with cancellation requests" lists item A. 12. Place a record-level hold that has not been captured for a patron. 13. Open the checkout page for the same patron. 14. Check out an item from that record. 15. Confirm the non-waiting hold is filled as before. Automated tests: 1. prove t/db_dependent/Reserves.t Co-Authored-By: Loontik commit 8870a456dc4f4800c52eb5729c3903cc850d14eb Author: Pedro Amorim Date: Fri Aug 28 16:32:19 2026 +0000 Bug 30144: dbic Signed-off-by: Pedro Amorim commit e42b4df37b1f7d00c9117c15046a1acdeb2f4839 Author: Jonathan Druart Date: Tue Jul 7 13:30:01 2026 +0200 Bug 42661: Remove redundant library's name if HidePatronName If HidePatronName is turned on and a hold is being placed on a hold for a patron with a different library, there is an alert the duplicate the library's name: Pickup library is different. Patron: A patron from library Springfield Patron's home library: (Springfield / SPL) With this patch: Pickup library is different. Patron's home library: Springfield / SPL Pickup library is different. Patron: Keith Hendrix Patron's home library: Springfield / SPL Test plan: Go to /cgi-bin/koha/reserve/request.pl?biblionumber=117&borrowernumber=26 And confirm that the changes make sense Signed-off-by: Anneli Österman Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 6e162e4c1042657579ca70f95aaa4033f86e2aa0 Author: Jonathan Druart Date: Thu Jun 18 12:07:26 2026 +0200 Bug 42727: Sort using the order from the staff syspref The main goal of the previous patch was to prevent the randomness, the languages were displayed by code. The languages in the footer are the languages enabled for the staff interface. This patch suggests to use the order of the syspref, and append the languages not enabled at the end of the list. Signed-off-by: David Nind Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit a098d97b5a8dc62ccc2eb2e04a8e722440cd7122 Author: Jonathan Druart Date: Mon Jun 1 14:28:17 2026 +0200 Bug 42727: List languages in a determinist order The list of languages are displayed in a random order in: * language picker at the bottom of the page * language tab when editing a notice template or an additional content This patch fixes it to display them in a determinist order Test plan: Have several languages installed, and some of them enabled, change the order of the languages in the syspref Reload the mainpage several times and notice that the languages are always displayed in the same order. Same when editing a notice template or an additional content. Note that I have not investigated yet why on the notice template and additinal content edit views they are not listed in the same order. Signed-off-by: David Nind Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 0f7145e4afcf2da16d5dc4077c56deefc73debc0 Author: Jonathan Druart Date: Mon Jun 1 14:25:45 2026 +0200 Bug 42727: Add tests Signed-off-by: David Nind Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 0a5919f108fa4140b3e82c3c49b70088a48b01b3 Author: Owen Leonard Date: Mon Aug 10 09:56:14 2026 -0400 Bug 43257: Remove event attributes from circulation.tt This patch updates circulation.tt in order to remove event attributes in favor of defining event handlers in the relevant JS file. To test, apply the patch and clear your cache if necessary. - If necessary, enable the SpecifyDueDate system preference. - Check out to a patron. - Click the checkout settings icon inside the barcode field. - Click the "Specify due date" field's "Remember for session" checkbox - The focus should move to the barcode field. - Enable recalls if necessary - Locate a checked out item which can be recalled. - Log in to the OPAC and recall the item. - In the staff interface, try to check that item out to another patron. - You should get a "Please confirm checkout" message. - Click the "Don't check out and print slip" button. - A popup should open for printing a recall slip. - The checkout page should reload without checking out the item. - If necessary, place a hold on an item for delivery to your logged-in library, check in the item, and confirm the hold. - Try to check out the item to another patron. - You should get a "Please confirm checkout" message. - Click "Don't check out, confirm hold, and print slip" - A popup should open for printing a hold slip. - The checkout page should reload without checking out the item. - If necessary, place a hold on an item but do not check it in. - Try to check out the item to a patron. - You should get a "Please confirm checkout" message. - Click "Cancel checkout and place hold for..." - You should be redirected to the holds page, placing a hold for that patron and that item. - The item should not have gotten checked out in the process. Sponsored-by: Athens County Public Libraries Signed-off-by: Olivia Reynolds Signed-off-by: Jonathan Druart Signed-off-by: Pedro Amorim commit b1905338eb6f64a24db4be159c304fafd772b576 Author: Jonathan Druart Date: Tue Aug 25 10:50:27 2026 +0200 Bug 43373: Holdings table - hide the shelving location column if empty The shelving location cell is always built with data: an empty HTML tag is added even if there is no location. So the "Shelving location" column is always displayed, it should only be displayed if there are items with data. Test plan: Have a biblio with all items without shelving location (or without several pages and at least one page without data). If all rows have empty shelving loc, the column should be hidden Signed-off-by: David Nind Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit d80ca5f4e844ec85621ce8865bcb686dcf6549aa Author: Jonathan Druart Date: Tue Jul 7 10:14:35 2026 +0200 Bug 42875: Correct failure message when adding an item to a bundle If bc_1 is checked out and I try to add bc_2 I get: "Failure: Item 'bc_2' belongs to another bundle" It should be: "Failure: Bundle is currently checked out" Test plan (using KTD): 1. Pick a record with items, for example: The definitive guide to Catalyst (146) 2. Edit the record and change 000 (the leader): - Click the tag editor - Change "7- Bibliographic level" to "C- Collection" 3. In the holdings table there is now a "Manage bundle (0|0)" option in the far right column for each item. 4. Check an item out for the record out, for example I checked out 39999000006117 to Mary Burton. 5. In the holdings table for the record, click on "Manage bundle" for the item you checked out (39999000006117). 6. In the expanded text area below the item row, click "+ Add to bundle". 7. In pop-up window, enter 39999000006131 "Item barcode" field (this is one of the other items for the record that is not checked out). 8. Click Submit. 9. You get an error: Failure: Item '39999000006131' belongs to another bundle 10. Apply the patch. 11. Restart everything: restart all 12. Hard refresh the page for the record. 13. Repeat steps 5 to 8. 14. You now get the correct error: "Failure: Bundle is currently checked out" Signed-off-by: David Nind Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 0c952e9e09a20ddecb6c46a2983151252c40bfbd Author: Jonathan Druart Date: Tue Aug 25 11:56:30 2026 +0200 Bug 43241: Add tests for timezone support in RFC3339 q= queries Co-Authored-By: Mistral Vibe Signed-off-by: Jonathan Druart Signed-off-by: Pedro Amorim commit fd87c5f1958c0aa4689871031eae59bdd6efba8c Author: Tomás Cohen Arazi Date: Thu Aug 6 15:28:18 2026 -0300 Bug 43241: (follow-up) Use form => for q= params in tests The + character in RFC3339 timezone offsets (e.g. +00:00) is decoded as a space when interpolated directly into a URL query string. Use Test::Mojo form => { q => ... } which properly URL-encodes the parameter value. Signed-off-by: Tomás Cohen Arazi Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Pedro Amorim commit 450e6bf178e938a116d733df3da9d93940cb95d8 Author: Tomás Cohen Arazi Date: Thu Aug 6 10:45:31 2026 -0300 Bug 43241: Fix datetime/boolean conversion in q= queries with DBIC operators _parse_dbic_query maps field names but did not convert values. When datetime or boolean filters are nested inside DBIC operators (-and, -or) in the q= parameter, attributes_from_api (which normally handles the conversion via _recursive_fixup) cannot reach them because it only iterates top-level keys. This patch fixes the issue in two places: 1. _parse_dbic_query (Query.pm): When a key maps to a known column (on the primary table or a related object), call _recursive_fixup to convert RFC3339 timestamps to MySQL format and booleans to 0/1. Related object instances are cached on the result_set to avoid repeated prefetch_whitelist lookups during recursive parsing. 2. Objects.pm: Move attributes_from_api to process named query params before merging with q= params. This avoids double-processing since q= values are already fixed up by _parse_dbic_query. Test plan: 1. Apply the regression tests from the previous commit 2. Run: $ prove t/Koha/REST/Plugin/Query.t $ prove t/db_dependent/Koha/REST/Plugin/Objects.t => FAIL: 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: Jonathan Druart Signed-off-by: Pedro Amorim commit 811e57c44165adc16152c756e14d0300d8db1104 Author: Tomás Cohen Arazi Date: Thu Aug 6 10:45:13 2026 -0300 Bug 43241: Add tests for datetime/boolean fixup inside DBIC operators This patch adds regression tests proving that RFC3339 datetime values and boolean values nested inside DBIC operators (-and, -or, -between) in q= queries are not converted to their DB-native format. Unit tests (Query.t): - Datetime: >=, <=, range, -or, -between, nested -and/-or, me. prefix - Boolean: true/false inside -and, -or, nested -and within -or - Non-datetime values pass through unchanged Integration tests (Objects.t): - Full API stack tests using action_logs with controlled data - Same operator/nesting coverage as unit tests Test plan: 1. Apply patch 2. Run: $ prove t/Koha/REST/Plugin/Query.t $ prove t/db_dependent/Koha/REST/Plugin/Objects.t => FAIL: Tests fail! Values inside -and are not converted 3. Sign off :-D Signed-off-by: Tomás Cohen Arazi Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Pedro Amorim commit 537a64a01b8a94f2157ffff1c9a3b29ae612aa45 Author: Martin Renvoize Date: Mon May 18 16:13:53 2026 +0100 Bug 42634: Force JWT cookie deletion on self-checkout logout The web-based self-checkout (opac/sco/sco-main.pl) builds the response JWT cookie with -expires => $jwt ? '+1d' : ''. On logout $jwt is undef, so the cookie is sent with an empty value and no Expires attribute - i.e. a session cookie with an empty value rather than a deletion. Some browsers/proxies retain the previous valid JWT in this scenario, which presents as the Finish/close button "doing nothing" or working only intermittently: the patron appears to remain logged in despite clicking Finish. Use a past Expires ('-1d') when no JWT is present so the browser deletes the cookie entirely. The subsequent ?op=logout render cannot then rediscover the patron from a stale cookie. Test plan: 1. Enable web-based self-checkout (SelfCheckoutByLogin or SelfCheckAllowByIPRanges). 2. Log in as a patron at /cgi-bin/koha/sco/sco-main.pl. 3. Open DevTools -> Application -> Cookies and note the JWT cookie. 4. Click the green "Finish" button. 5. Without the patch: Set-Cookie on the ?op=logout response shows JWT= with no Expires; the cookie persists as an empty session cookie. 6. With the patch: Set-Cookie shows JWT=; expires=; the browser removes the cookie entirely. 7. Confirm the kiosk reliably returns to the login screen and subsequent page loads do not re-authenticate from a stale JWT. Sponsored-by: OpenFifth Signed-off-by: David Nind Signed-off-by: Emmi Takkinen Signed-off-by: David Cook Signed-off-by: Pedro Amorim commit b719532f24551ce0039f41baab9933b0441c7415 Author: Andrew Nugged Date: Wed Aug 19 23:47:12 2026 +0300 Bug 42605: Add automated tests Store scalar preference values when saving the acquisition preferences and clean up the invoice explicitly. Exercise the rendered receiving behavior for a basket that inherits AcqCreateItem, one that explicitly overrides it with "ordering", and a basket that creates items on receiving. Keep the explicit "ordering" case as a control for behavior that already works without the production fix. This changes tests only. Automated tests: yarn cypress run --spec \ t/cypress/integration/Acquisitions/OrderReceivePreferences_spec.ts Co-Authored-By: Loontik Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Pedro Amorim commit 757b347bed2873b8851756f9c0444f66cd8dcddb Author: Andrew Nugged Date: Tue Aug 18 11:47:28 2026 +0300 Bug 42605: Preserve acquisition preference string values Bug 41563 converted AcqCreateItem and UniqueItemFields to booleans when adding them to Koha.prefs. Both preferences are strings: AcqCreateItem controls where items are created, while UniqueItemFields contains a pipe-separated list. When a basket inherits AcqCreateItem=ordering, the boolean value matches none of the receiving page branches and existing items are hidden. When items are created on receiving, the numeric UniqueItemFields value also fails when the page calls split(). Preserve both string values in Koha.prefs. Add a Cypress regression test which renders orderreceive.pl and verifies the values exposed to JavaScript. Test plan: Before applying the patch: 1. Set AcqCreateItem to "placing an order" and UniqueItemFields to "barcode". 2. Create a basket that inherits the system preference. Add an order with one item, close the basket, and start receiving it. 3. Confirm that the Items table has no existing item row and no Receive checkbox. 4. Set AcqCreateItem to "receiving an order" and open the same order for receiving. 5. Confirm that the Items section is empty: no item-entry fields and no Add item button are shown. Apply the patch. After applying the patch: 1. Set AcqCreateItem back to "placing an order" and open the order for receiving again. 2. Confirm that its existing item is listed and has a Receive checkbox. 3. Set AcqCreateItem to "receiving an order" and open the same order again. 4. Confirm that the Items section contains item-entry fields and an Add item button. Co-Authored-By: Loontik Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Pedro Amorim commit 3dc90004ca324e54340888356df5c88aa01c7122 Author: Tomás Cohen Arazi Date: Thu May 21 23:45:06 2026 -0300 Bug 39769: Flush L1 cache in es_indexer_daemon.pl before each batch The daemon runs as a long-lived process and never clears its L1 cache. System preference changes (e.g. IncludeSeeFromInSearches) are not picked up until the daemon is manually restarted. Flush L1 caches at the start of each commit() call so that preference changes take effect on the next indexing batch without requiring a daemon restart. Signed-off-by: Jonathan Druart Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 279448539c4a2003f531cab955067acb9ef679c2 Author: Pedro Amorim Date: Fri Aug 28 16:22:47 2026 +0000 Bug 30144: DBRev 26.06.00.017 Signed-off-by: Pedro Amorim commit 08a2e0475b330e4459198f96a3876c458d14fd98 Author: Martin Renvoize Date: Tue Aug 18 16:57:38 2026 +0100 Bug 30144: (QA follow-up) Exclude servicing_instruction from order API representation The servicing_instruction column was not mapped in Koha::Acquisition::Order->to_api_mapping, so it was exposed verbatim in the REST API order representation. Since api/v1/swagger/definitions/order.yaml does not declare this property and sets additionalProperties: false, any request touching the acquisitions/orders endpoint (e.g. the "Receive shipments" page) failed with a 500 error: "Properties not allowed: servicing_instruction". Exclude it from the API representation, consistent with the other EDIFACT-only columns (line_item_id, suppliers_reference_number, etc.) that are already excluded the same way. Test plan: 1) Go to a vendor page, create a basket, add an order line, and close the basket. 2) From the vendor page, click "Receive shipments". 3) Without this patch, the orders table fails to load with a 500 error mentioning "Properties not allowed: servicing_instruction". 4) With this patch applied, the orders table loads correctly. 5) prove t/db_dependent/api/v1/acquisitions_orders.t Signed-off-by: Pedro Amorim commit 2e1f8b86607e42f56fb1ecb6055083e3f6362c1e Author: Martin Renvoize Date: Wed Aug 5 14:17:08 2026 +0100 Bug 30144: (QA follow-up) Make servicing instruction UI strings translatable The servicing instructions widget added new user-facing strings (alerts, button labels, hints) built entirely in JS via string concatenation, none of which were wrapped for translation - unlike the pre-existing JS in the same file, which already uses _() throughout. Wrap them the same way, using _("...").format(...) for the strings that interpolate a value, matching the existing pattern used elsewhere in this file. Signed-off-by: Pedro Amorim commit bbb7f406d2ec6ddf4a78bf923842ac99ec8b1326 Author: Martin Renvoize Date: Wed Aug 5 13:07:57 2026 +0100 Bug 30144: (QA follow-up) Fix stored XSS in servicing instructions The RM's review found two stored XSS vectors in the servicing instruction free-text (LVT) handling: 1. neworderempty.tt embedded the servicing instruction JSON (and the EDIFACT_SI authorised values list) directly into an inline -breakout scenario from the original bug -- but it does not escape backslashes. A list name ending in a backslash (e.g. "foo\") escapes the closing quote of the JS string literal, unbalancing it and throwing a JS syntax error that breaks the whole inline and confirm it displays as inert text, not executing, on the same pages. Signed-off-by: Pedro Amorim commit 22a6ab9729f4737b25af7be8ad2514c3bae645ea Author: Jonathan Druart Date: Tue Jun 9 11:19:35 2026 +0200 Bug 42800: Fix XSS in shelf list in the ERM module const logged_in_user_lists = [% To.json(logged_in_user.virtualshelves.unblessed) | $raw %]; If you have a script tag in a list name the UI will be broken, and there is potentially a XSS vulnerability Test plan: Create a new list with name="" Go to /cgi-bin/koha/erm/eholdings/local/titles/import or any ERM views => Without this patch the UI is broken => With this patch applied it's not and the table is correctly populated with the lists Signed-off-by: David Cook Signed-off-by: Martin Renvoize Signed-off-by: Pedro Amorim commit 074e0b7261d3a62d579985526052e67220de5086 Author: Sanjar Tulkinov Anvar o'g'li Date: Thu Jul 30 04:47:43 2026 -0400 Bug 42736: Prevent SQL injection in reports/cat_issues_top.pl The "Most-circulated items" report built its SQL by concatenating the Criteria and Filter request parameters directly into the query, with no bind placeholders and no whitelist on the Criteria identifier. An authenticated staff user with the reports permission could inject arbitrary SQL and read any data reachable by the Koha database user. This validates the Criteria parameter against a fixed allow-list of the report's own column options (matching reports/cat_issues_top.tt) so it is safe to use as a SQL identifier, and binds every Filter value with a placeholder in both the column-header query and the main calculation query. The Limit parameter is validated as a plain integer. This mirrors the fix already applied to the sibling reports/bor_issues_top.pl (bug 42369). Test plan: 0. Apply the patch 1. koha-plack --restart kohadev 2. Go to Reports > Most-circulated items (reports/cat_issues_top.pl) 3. Run the report with various Criteria and Filter values, confirm the output is correct and no errors appear 4. Before the patch, a Filter value or the Criteria containing SQL (a single quote followed by a subquery) broke out of the query. After the patch, confirm such input is treated as a literal value: you get normal output or an empty result, with no SQL error, no delay, and no data leak Signed-off-by: Sanjar Tulkinov Anvar o'g'li Signed-off-by: David Cook Signed-off-by: Aleisha Amohia Signed-off-by: Pedro Amorim commit e8137a2c945bdea6064aeacf68750ac1f8a0eea4 Author: Jonathan Druart Date: Mon Aug 24 09:39:05 2026 +0200 Bug 42322: Add Cypress tests Signed-off-by: Pedro Amorim commit fc8f56b88f8d76198bf8d3743d9ac01c59d971d3 Author: Owen Leonard Date: Fri Aug 7 07:53:16 2026 -0400 Bug 42322: (follow-up) Correct markup of ILL sidebar menu Signed-off-by: Pedro Amorim commit 71d8564789af6c6da5358e7e51a4b0ec20a5cb7c Author: Owen Leonard Date: Thu Jun 25 11:35:24 2026 -0400 Bug 42322: (follow-up) Switch to mobile-first handling of sidebar toggle Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit c407f73309c79fafadf4275aa1034ae835c8aca6 Author: Jonathan Druart Date: Thu Jun 25 10:09:11 2026 +0200 Bug 42322: Hide collapsed sidebar on small screens When the sidebar is collapsed and the screen is resized to <= 1000px, '#sidebar-container' should be hidden Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit 7fb0345f7fe1accfe4269099bb240d396df27e17 Author: Jonathan Druart Date: Wed Jun 24 06:31:45 2026 +0200 Bug 42322: Correctly toggle aria-expanded Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit e8c79017885785e37246abd89eee13aed9efa08c Author: Jonathan Druart Date: Tue Jun 16 15:53:49 2026 +0200 Bug 42322: Add missing raw filter for aside_block Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit 4d87ae3424b1364f4ec26972e75673daed099bf7 Author: Jonathan Druart Date: Mon Apr 13 10:50:18 2026 +0200 Bug 42322: Hide .patroninfo, .browse-controls and #search-facets when collapsed Fix sidebar when collapsed on: * /members/moremember.pl?borrowernumber=42 * /catalogue/search.pl?advsearch=1&idx=kw&q=d&idx=kw&q=&idx=kw&q=&weight_search_submitted=1&weight_search=1&sort_by=relevance * /catalogue/detail.pl?biblionumber=438&searchid=scs_1776086577193 (with BrowseResultSelection ON) Signed-off-by: Clemens Tubach Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit 34644298e4bd01abf6d291571b63bf939fdbcbdc Author: Owen Leonard Date: Fri Apr 10 12:02:18 2026 -0400 Bug 42322: (follow-up) A version with just the button Signed-off-by: Clemens Tubach Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit f9dc282e2678799a79b90c4f1c3217b2dd7fab79 Author: Owen Leonard Date: Thu Apr 9 12:14:23 2026 -0400 Bug 42322: (follow-up) Proposed alternative style This version keeps a visual indicator of the collapsed sidebar. I've also added handling of the "aria-expanded" attribute. Signed-off-by: Clemens Tubach Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit 4784d952e71480e6318b836b712305d318bc721b Author: Jonathan Druart Date: Thu Apr 9 15:26:20 2026 +0200 Bug 42322: Vue apps Signed-off-by: Clemens Tubach Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit b8048548659cdb7ed1167858b23e3e9cf3e64945 Author: Owen Leonard Date: Fri Aug 7 07:55:56 2026 -0400 Bug 42322: Auto tidy To ease rebase! Re-run. Signed-off-by: Pedro Amorim commit be9a2c7c5f9136b6e26b2f9e377904d083d04f48 Author: Jonathan Druart Date: Thu Apr 9 11:45:05 2026 +0200 Bug 42322: Use main-container.inc from reports Pass the aside block from the report module Signed-off-by: Clemens Tubach Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit add690d0f420ecd769dd991c418238803cb7c139 Author: Jonathan Druart Date: Thu Apr 9 11:43:22 2026 +0200 Bug 42322: Pass the aside to main-container Improve main-container.inc so we can pass a specific aside block Signed-off-by: Clemens Tubach Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit ab7602b0f360d327149937c80aeb24c57d58d9ab Author: Jonathan Druart Date: Thu Apr 9 11:27:23 2026 +0200 Bug 42322: Add a 'collapse sidebar' button On bug 42190 we discuss the possibility to collapse the sidebar in order to enlarge the screen and specifically the table in the main div. This patch adds the button to main-container.inc that is supposed to be used from everywhere. Signed-off-by: Clemens Tubach Signed-off-by: Lucas Gass Signed-off-by: Pedro Amorim commit ce3643073a4cfce9c3da2b4b106d8b7c5e2788c1 Author: Matt Blenkinsop Date: Thu Jun 11 17:05:09 2026 +0100 Bug 39959: Add a total column to the invoices table Test plan: 1. Create an order and receive it to create an invoice 2. In the invoices search, look for your invoice 3. There will be no total against the invoice 4. Apply patch and restart_all 5. Refresh the page, the total column should now be present Signed-off-by: Coleen Lilly Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 2ce97a58e2610ed86b1d5e8c4bd6e710b67b0cda Author: Matt Blenkinsop Date: Mon Aug 24 09:55:29 2026 +0100 Bug 12278: (follow-up) Use invoice quantity to sum total Prevents additional orders from subscriptions from being swallowed into the invoice total calculation Signed-off-by: Pedro Amorim commit f7bbdd4976f138e60939b30b7c23815c3cd11a86 Author: Matt Blenkinsop Date: Thu Jun 11 16:39:39 2026 +0100 Bug 12278: Add unit tests Signed-off-by: Coleen Lilly Signed-off-by: Andrew Fuerste Henry Sponsored-by: Anne Arundel County Public Library Signed-off-by: Pedro Amorim commit b114eb709fc4fee1507f141cb223ffc62670c18e Author: Matt Blenkinsop Date: Thu Jun 11 16:37:53 2026 +0100 Bug 12278: Add a total column to the table in parcels.pl Test plan: 1. Create an order with multiple items and receive the order in full 2. From the vendor record, click Receive shipments 3. You should be in parcels.pl and the table should show your shipments 4. There will be no column displaying the total 5. Apply patch and restart_all 6. Refresh the page, the column should now be visible showing the total Signed-off-by: Coleen Lilly Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim