https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=42608
--- Comment #6 from Andrew Fuerste-Henry <[email protected]> --- Created attachment 206197 --> https://bugs.koha-community.org/bugzilla3/attachment.cgi?id=206197&action=edit 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 <[email protected]> Signed-off-by: Andrew Fuerste Henry <[email protected]> -- You are receiving this mail because: You are watching all bug changes. _______________________________________________ Koha-bugs mailing list -- [email protected] To unsubscribe send an email to [email protected] website : http://www.koha-community.org/ git : http://git.koha-community.org/ bugs : http://bugs.koha-community.org/
