Go to file
Martin Renvoize 58d41bfedf
Bug 42608: Stop hold pickup expiration from week-jumping over closures
Koha::Hold::set_waiting calls Koha::Calendar::days_forward to derive the
holds-shelf expiration date when ExcludeHolidaysFromMaxPickUpDelay is on.
days_forward iterated next_open_days($dt, 1) ReservesMaxPickUpDelay times,
and next_open_days consults get_push_amt for every closed day it
encounters. Under useDaysMode=Dayweek, get_push_amt returns 7 for any
closure that is not a permanently closed weekday -- so an intermediate
Bank Holiday Monday inside the pickup window pushed the cursor a whole
week forward instead of one day, inflating the expiration by seven days.

Dayweek is a loan-due-date concept: it exists to keep a Friday-due loan
due on a Friday across closures. A patron does not pick a weekday for a
hold-shelf collection; staff set the expiration when they trap the item,
and the only thing that should drive it is how many open days the patron
should have to come and collect. days_forward is now decoupled from
useDaysMode and always counts forward one open day at a time, ignoring
closures without consuming them from the count.

next_open_days, prev_open_days, get_push_amt and addDays are unchanged --
loan due-date math keeps the existing Dayweek behaviour.

Test plan:
1. Inside KTD, run the updated unit tests:

     prove t/db_dependent/Calendar.t
     prove t/db_dependent/Hold.t

   Confirm both pass, including the new Bug 42608 sub-tests. These cover
   the full matrix of starting weekdays and useDaysMode values; the
   manual steps below are a single confirmatory pass through the UI.

2. Manual reproduction (UI only -- no database or CLI access needed):
   - Set sysprefs: useDaysMode=Dayweek, ReservesMaxPickUpDelay=6,
     ExcludeHolidaysFromMaxPickUpDelay=ON, ExpireReservesOnHolidays=ON.
   - Administration > Calendar: on a test branch, add one single
     (one-time) holiday -- not weekly/repeating -- on any weekday within
     the next 6 days that isn't already closed (e.g. the day after
     tomorrow, as long as it isn't a Sunday or other closed day). This
     one-off closure inside the pickup window is what triggers the bug.
   - Place a hold on an available item, then check the item in at that
     branch and confirm/trap it. This stamps waitingdate with today's
     date automatically -- no manual date entry required.
   - Check the hold's expiration date (Holds awaiting pickup list, or
     the patron's holds tab):
       Without the fix: expiration lands a full 7 days later than it
       should (today + 6 + 7), from the week-jump.
       With the fix: expiration is today + 6 open days, only skipping
       the one closed day.

3. Verify the existing Calendar mode behaviour is unchanged:
   - Switch useDaysMode to Calendar and repeat step 2 -- the same
     expected expiration date should apply.

4. Verify loan due-date behaviour is unchanged:
   - With useDaysMode=Dayweek, check out an item whose loan period would
     place its due date on the same closed day used in step 2. Confirm
     the due date still rolls forward by a whole week (the original
     Dayweek intent), proving this patch did not regress
     addDays/addDuration.

Sponsored-by: OpenFifth <https://openfifth.co.uk/>
Signed-off-by: Jackie Usher <jackie.usher@westsussex.gov.uk>
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
2026-09-24 11:48:37 +00:00
.github/workflows
…
C4 Bug 40934: (follow-up) Fix false positive on --code/--exclude-code mutual exclusivity 2026-09-21 11:56:49 +00:00
Koha Bug 42608: Stop hold pickup expiration from week-jumping over closures 2026-09-24 11:48:37 +00:00
acqui Bug 30144: (QA follow-up) Only show servicing instructions when EDIFACT is available 2026-09-09 12:07:23 +00:00
admin Bug 10190: Add manage_circ_triggers permission for notice trigger access 2026-09-10 14:25:09 +00:00
api Bug 42679: (QA follow-up) Remove search tag that belongs to bug 42508 2026-09-11 16:05:57 +00:00
authorities Bug 21453: Copy data to the correct subfields when linking authorities with authorities 2026-04-23 09:24:58 -06:00
basket
…
bin
…
bookings
…
catalogue Bug 41318: Rename AmazonLocale to AmazonLocaleTld 2026-09-10 14:25:34 +00:00
cataloguing Bug 42512: Pass already checked/cleaned MARC::Record to Metadata Extractor 2026-07-16 10:54:18 +00:00
circ Bug 42310: (follow-up) Move Koha::Calendar tree under Koha::Library::Calendar 2026-09-15 16:14:02 +00:00
clubs
…
course_reserves
…
debian Bug 41920: Limit number of concurrent reports that can be run simultaneously for an instance of Koha 2026-09-15 14:45:08 +00:00
docs Bug 42726: Add 26.11 release team 2026-06-02 15:07:16 +00:00
erm
…
errors
…
etc Bug 41920: Limit number of concurrent reports that can be run simultaneously for an instance of Koha 2026-09-15 14:45:08 +00:00
ill Bug 37762: Circulation: Hook to checkouts/checkins 2026-05-08 12:25:43 -06:00
installer Bug 43336: DBRev 26.06.00.028 2026-09-21 16:07:50 +00:00
koha-tmpl Bug 43237: (follow-up) Adding [% PROCESS 'i18n.inc' %] to two templates which lack it 2026-09-21 16:07:52 +00:00
labels Bug 42764: Fix spelling errors across the codebase 2026-06-03 16:09:04 +00:00
lib Bug 41521: Silent perlcritic warnings 2026-03-24 09:55:54 +01:00
members Bug 31391: Implement UseRecalls choices on staff interface 2026-09-14 14:15:52 +00:00
misc Bug 40934: (follow-up) Fix false positive on --code/--exclude-code mutual exclusivity 2026-09-21 11:56:49 +00:00
offline_circ Bug 40492: Improvements to offline circ actions table 2026-07-28 14:32:44 +00:00
opac Bug 30319: Remove appropriate hidden fields on self-modification 2026-09-21 11:11:22 +00:00
patron_lists
…
patroncards Bug 42747: (QA follow-up) Parameterize query, dedupe, and log rejections 2026-08-11 12:39:40 +00:00
plugins Bug 25952: Skip invalid repositories when searching for plugins 2025-11-21 08:41:52 -07:00
pos Bug 40445: (QA follow-up) Show cashup summary modal when completing from registers.pl 2026-07-27 12:12:41 +00:00
preservation Bug 35267: Apply preferences to preview and mailing 2026-04-17 09:18:06 -06:00
recalls Bug 31391: Allow cancel recall if UseRecalls enabled, remove unnecessary vars 2026-09-14 14:15:56 +00:00
reports Bug 43296: (follow-up) Fix perltidy 2026-09-21 11:56:43 +00:00
reserve Bug 42385: Use Koha::Policy::Circulation everywhere 2026-09-21 11:11:30 +00:00
reviews
…
rotating_collections
…
serials Bug 43239: Preserve item item type if previousitemtype column is undefined 2026-08-12 15:49:49 +00:00
services
…
sip2 Bug 37893: Fix http links 2025-11-18 11:21:20 -07:00
skel
…
suggestion Bug 42919: Retain suggestion form values when duplicate warning is shown 2026-07-16 17:05:13 +00:00
svc Bug 42385: Remove _GetCircControlBranch 2026-09-21 11:11:32 +00:00
t Bug 42608: Stop hold pickup expiration from week-jumping over closures 2026-09-24 11:48:37 +00:00
tags Bug 42254: (QA follow-up) Remove unused var, fixing a FIXME 2026-04-28 15:48:24 -06:00
tools Bug 34632: (QA follow-up) Use Koha::Uploader for patron import files 2026-09-11 16:06:05 +00:00
virtualshelves Bug 42567: Remove C4::Koha::GetNormalizedEAN in favor of MetadataExtractor 2026-08-20 15:34:10 +00:00
xt Bug 42330: (QA follow-up) Fix file permissions on new test and tidy 2026-09-04 11:23:24 +00:00
.codespell-ignore Bug 42764: Fix false positives caused by POD letter-code formatting 2026-06-03 16:09:05 +00:00
.editorconfig
…
.git-blame-ignore-revs
…
.gitignore Bug 26355: Add a Vue island for the self-renewal modal 2026-05-01 09:30:00 -06:00
.htaccess
…
.mailmap Bug 40041: (follow-up) Fix periods and add Robert Fox 2025-12-05 09:29:04 -07:00
.nvmrc Bug 42353: Store the node version in .nvmrc 2026-04-15 09:14:53 -06:00
.perlcriticrc
…
.perltidyrc
…
.prettierrc.js
…
.proverc.dist
…
.stylelintrc.json
…
INSTALL
…
Koha.pm Bug 43336: DBRev 26.06.00.028 2026-09-21 16:07:50 +00:00
LICENSE
…
MANIFEST.SKIP
…
Makefile.PL Bug 43401: (QA follow-up) tweak rspack.config.js comment and fix Makefile.PL 2026-09-11 15:06:54 +00:00
README
…
README.md
…
README.robots
…
SECURITY.md
…
about.pl Bug 42453: Remove warning 2026-06-29 15:39:07 +00:00
app.psgi Bug 38365: Integrate CSP middleware into Plack apps 2026-03-16 11:57:12 +01:00
build-resources.PL
…
changelanguage.pl
…
cpanfile Bug 41717: Bump PDF::Reuse and PDF::Reuse::Barcode versions 2026-07-28 14:32:22 +00:00
cypress.config.ts Bug 42772: Cypress.env => cy.env 2026-07-20 12:45:01 +00:00
eslint.config.mjs
…
fix-perl-path.PL
…
gulpfile.js Bug 42356: Silence Sass if-function deprecation warning 2026-04-17 09:18:15 -06:00
help.pl
…
kohaversion.pl
…
mainpage.pl
…
package.json Bug 43091: Clean the OPAC Vue dist directory in js:clean 2026-08-03 13:00:37 +00:00
rewrite-config.PL
…
rspack.config.js Bug 43401: (QA follow-up) tweak rspack.config.js comment and fix Makefile.PL 2026-09-11 15:06:54 +00:00
tsconfig.json
…
yarn.lock Bug 42772: Adjust yarn.lock 2026-07-20 12:45:02 +00:00

README.md

Koha is a free software integrated library system (ILS).

Koha is distributed under the GNU GPL version 3 or later.

Note: Koha does not accept pull requests from git hosting sites.

Note: This project has its own bug tracker, to report a bug or submit a patch visit https://bugs.koha-community.org.

For guidelines on submitting patches for Koha please visit https://wiki.koha-community.org/wiki/SubmitingAPatch

The developers handbook can be found at https://wiki.koha-community.org/wiki/Developer_handbook

https://koha-community.org/

Koha Logo