Bug 19532 - Recalls for Koha
Summary: Recalls for Koha
Status: Needs documenting
Alias: None
Product: Koha
Classification: Unclassified
Component: Circulation (show other bugs)
Version: Main
Hardware: All All
: P1 - high new feature with 125 votes (vote)
Deadline: 2017-12-01
Assignee: Aleisha Amohia
QA Contact: Testopia
URL:
Keywords:
Depends on:
Blocks: 23781 29734 31391 33399 34722 35967 36142 36209 36210 30291 30294 30488 30505 30531 30600 30722 30788 30823 30876 30885 30886 30907 31147 32129 32268 32445 32967 33220 33990 33992 34010 34016
  Show dependency treegraph
 
Reported: 2017-10-25 23:27 UTC by Liz Rea
Modified: 2024-03-01 01:53 UTC (History)
34 users (show)

See Also:
Change sponsored?: Sponsored
Patch complexity: Large patch
Documentation contact: David Nind
Documentation submission:
Text to go in the release notes:
This new feature introduces the ability for patrons to place a recall on an item from the OPAC detail. Patrons can see details of their requested recalls in the OPAC and can cancel the recall before it is returned. Librarians can view and administer the recalls in the Circulation interface of the staff interface which displays a list of recalls, overdue recalls, recalls awaiting pickup, recalls to pull, and old recalls. The amount of time the recalled item has to be returned and the amount of time it will wait for pickup can be set in circulation and fine rules in the unit of days. After an item is recalled it cannot be renewed. When the item is returned the recall can be confirmed or cancelled. Recalls are marked as overdue by the overdue_recalls.pl cronjob or expired by the expired_recalls.pl cronjob.
Version(s) released in:
22.05.00


Attachments
Bug 19532: Database updates (12.02 KB, patch)
2017-10-25 23:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (6.42 KB, patch)
2017-10-26 01:02 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (6.99 KB, patch)
2017-10-26 01:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Module files for Recall and OldRecall (16.49 KB, patch)
2017-10-26 01:06 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (5.58 KB, patch)
2017-10-26 21:25 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (6.16 KB, patch)
2017-10-26 21:32 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (5.55 KB, patch)
2017-10-26 21:42 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Some module fixes (9.83 KB, patch)
2017-10-26 21:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Circulation rules (8.52 KB, patch)
2017-10-27 03:07 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.09 KB, patch)
2017-11-13 01:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.67 KB, patch)
2017-11-13 02:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.81 KB, patch)
2017-11-14 21:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (12.44 KB, patch)
2017-11-14 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: recalls history (22.52 KB, patch)
2017-11-15 01:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls queue (15.29 KB, patch)
2017-11-15 22:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.45 KB, patch)
2017-11-16 00:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.27 KB, patch)
2017-11-19 22:24 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.79 KB, patch)
2017-11-20 00:51 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (22.35 KB, patch)
2017-11-20 02:35 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (6.99 KB, patch)
2017-11-24 00:55 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.87 KB, patch)
2017-11-27 00:51 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.30 KB, patch)
2017-11-27 01:21 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.02 KB, patch)
2017-11-27 22:21 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.56 KB, patch)
2017-11-28 01:39 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.71 KB, patch)
2017-11-28 04:10 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (943 bytes, patch)
2017-11-28 04:21 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Fixing merge conflicts etc (1.09 KB, patch)
2017-12-18 03:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (997 bytes, patch)
2017-12-19 01:32 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Circulation rules (8.58 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.09 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.67 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.81 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (12.44 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: recalls history (22.52 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls queue (15.29 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.45 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.27 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.79 KB, patch)
2017-12-19 01:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (22.35 KB, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (6.96 KB, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.87 KB, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.30 KB, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.02 KB, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.56 KB, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.71 KB, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (997 bytes, patch)
2017-12-19 01:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.42 KB, patch)
2017-12-21 03:38 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.31 KB, patch)
2017-12-22 01:03 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (5.28 KB, patch)
2018-02-12 02:53 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.96 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (12.44 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: recalls history (22.52 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls queue (15.29 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.45 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.27 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.79 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (22.35 KB, patch)
2018-02-13 22:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (6.96 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.87 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.30 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.02 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.56 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.71 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (997 bytes, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.42 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.50 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (5.28 KB, patch)
2018-02-13 22:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (38.09 KB, patch)
2018-02-13 22:48 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (31.23 KB, patch)
2018-02-26 21:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database updates (12.08 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Module files for Recall and OldRecall (16.55 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (5.61 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Some module fixes (9.88 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Circulation rules (8.51 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.15 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.72 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (15.15 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (12.50 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: recalls history (22.58 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Recalls queue (15.34 KB, patch)
2018-03-01 16:00 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.51 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.32 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.84 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (22.07 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (7.02 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.92 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.36 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.07 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.61 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.77 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (1.03 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.48 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.56 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (38.14 KB, patch)
2018-03-01 16:01 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (31.31 KB, patch)
2018-03-01 16:02 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532 (follow-up) Update characterset for recalls table (1.34 KB, patch)
2018-03-01 16:02 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532 - Improve and refine recalls functionality (25.17 KB, patch)
2018-03-01 16:02 UTC, Nick Clemens
Details | Diff | Splinter Review
Bug 19532 - Improve and refine recalls functionality (25.18 KB, patch)
2018-03-08 02:10 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database updates (12.08 KB, patch)
2018-07-10 22:31 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Module files for Recall and OldRecall (16.55 KB, patch)
2018-07-10 22:32 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (5.61 KB, patch)
2018-07-10 22:33 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Some module fixes (9.88 KB, patch)
2018-07-10 22:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Circulation rules (8.09 KB, patch)
2018-07-10 22:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.15 KB, patch)
2018-07-10 22:36 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.36 KB, patch)
2018-07-10 22:37 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.43 KB, patch)
2018-07-10 22:38 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (11.75 KB, patch)
2018-07-10 22:40 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: recalls history (22.33 KB, patch)
2018-07-10 22:41 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recalls queue (14.54 KB, patch)
2018-07-10 22:42 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.51 KB, patch)
2018-07-10 22:43 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.32 KB, patch)
2018-07-10 22:44 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.80 KB, patch)
2018-07-10 22:46 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (21.58 KB, patch)
2018-07-10 22:48 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (7.02 KB, patch)
2018-07-10 22:49 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.92 KB, patch)
2018-07-10 22:51 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.36 KB, patch)
2018-07-10 23:15 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.07 KB, patch)
2018-07-10 23:16 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.61 KB, patch)
2018-07-10 23:18 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.77 KB, patch)
2018-07-10 23:19 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (1.10 KB, patch)
2018-07-10 23:20 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.40 KB, patch)
2018-07-10 23:21 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.04 KB, patch)
2018-07-10 23:22 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (38.14 KB, patch)
2018-07-10 23:23 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (30.92 KB, patch)
2018-07-10 23:25 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 (follow-up) Update characterset for recalls table (1.34 KB, patch)
2018-07-10 23:26 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Improve and refine recalls functionality (25.11 KB, patch)
2018-07-10 23:32 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Fixes to stop transfer recall modal from being displayed incorrectly (11.13 KB, patch)
2018-07-10 23:34 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Recalls for Course Reserves. (2.55 KB, patch)
2018-07-10 23:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Fix for recall OPAC confirmation failing when recall circ rule is empty (1.44 KB, patch)
2018-07-10 23:37 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Stopping an recalled item currently awaiting pickup from being able to be checked out to patrons other than the recall requester. (5.78 KB, patch)
2018-07-23 04:05 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Make the Recall confirmation popup appear everytime a recalled item is put through returns until it is checked out to recall requester (3.23 KB, patch)
2018-07-23 04:24 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - New RECALL_REQUESTER_DET notice and print option on confirm recall popup (12.04 KB, patch)
2018-07-23 05:46 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Database updates (12.10 KB, patch)
2018-09-14 22:22 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Module files for Recall and OldRecall (16.58 KB, patch)
2018-09-14 22:22 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (5.62 KB, patch)
2018-09-14 22:23 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Some module fixes (9.91 KB, patch)
2018-09-14 22:23 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Circulation rules (8.11 KB, patch)
2018-09-14 22:23 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.18 KB, patch)
2018-09-14 22:23 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.85 KB, patch)
2018-09-14 22:23 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.25 KB, patch)
2018-09-14 22:23 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (11.75 KB, patch)
2018-09-14 22:23 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: recalls history (22.41 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Recalls queue (14.58 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.54 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.35 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.86 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (21.74 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (7.02 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.93 KB, patch)
2018-09-14 22:24 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.37 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.10 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.62 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.77 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (1.11 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.47 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.11 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (27.28 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (30.61 KB, patch)
2018-09-14 22:25 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 (follow-up) Update characterset for recalls table (1.34 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 - Improve and refine recalls functionality (25.19 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 - Fixes to stop transfer recall modal from being displayed incorrectly (11.19 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 - Recalls for Course Reserves. (2.49 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 - Fix for recall OPAC confirmation failing when recall circ rule is empty (1.44 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 - Stopping an recalled item currently awaiting pickup from being able to be checked out to patrons other than the recall requester. (5.84 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 - Make the Recall confirmation popup appear everytime a recalled item is put through returns until it is checked out to recall requester (3.25 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532 - New RECALL_REQUESTER_DET notice and print option on confirm recall popup (11.94 KB, patch)
2018-09-14 22:26 UTC, Chris Cormack
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (20.12 KB, patch)
2018-10-17 23:01 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (7.00 KB, patch)
2018-10-17 23:02 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.92 KB, patch)
2018-10-17 23:02 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.36 KB, patch)
2018-10-17 23:03 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.07 KB, patch)
2018-10-17 23:03 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.61 KB, patch)
2018-10-17 23:04 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.77 KB, patch)
2018-10-17 23:04 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (1.02 KB, patch)
2018-10-17 23:05 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.40 KB, patch)
2018-10-17 23:05 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.05 KB, patch)
2018-10-17 23:06 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (40.37 KB, patch)
2018-10-17 23:06 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (30.48 KB, patch)
2018-10-17 23:07 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 (follow-up) Update characterset for recalls table (1.34 KB, patch)
2018-10-17 23:07 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Improve and refine recalls functionality (25.08 KB, patch)
2018-10-17 23:08 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Fixes to stop transfer recall modal from being displayed incorrectly (10.50 KB, patch)
2018-10-17 23:08 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Recalls for Course Reserves. (2.48 KB, patch)
2018-10-17 23:09 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Fix for recall OPAC confirmation failing when recall circ rule is empty (1.43 KB, patch)
2018-10-17 23:09 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Stopping an recalled item currently awaiting pickup from being able to be checked out to patrons other than the recall requester. (5.82 KB, patch)
2018-10-17 23:09 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Make the Recall confirmation popup appear everytime a recalled item is put through returns until it is checked out to recall requester (3.23 KB, patch)
2018-10-17 23:10 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - New RECALL_REQUESTER_DET notice and print option on confirm recall popup (11.91 KB, patch)
2018-10-17 23:11 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixing Internal Server Error thrown on C4/Circulation.pm (589 bytes, patch)
2018-10-18 01:45 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Implemented check if recall status equals 'R' before recall popup is shown (1.43 KB, patch)
2018-10-18 01:45 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Added conditional to check the recall has a status = 'W' before setting it to closed (1.33 KB, patch)
2018-10-18 01:46 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixed display of recall buttons on opac-course-details.pl (2.59 KB, patch)
2018-10-18 01:47 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Stopping recalls awaiting pickup to be issued to patrons other than the patron who recalled. (1.88 KB, patch)
2018-10-18 01:47 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Amended the detail.pl call to retrieve recalls so now it retrieves recalls with the status of 'R' or 'W' (1.41 KB, patch)
2018-10-18 01:48 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Stopping recalled items (recall status='R') from being renewed (2.36 KB, patch)
2018-10-18 01:48 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixed Internal Server error thrown upon returning recalled item (1.21 KB, patch)
2018-10-18 03:29 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fix t/db_dependent/Koha/Recalls.t (1.50 KB, patch)
2018-10-18 20:54 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Circulation rules (7.74 KB, patch)
2018-10-25 22:25 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.15 KB, patch)
2018-10-25 22:26 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.83 KB, patch)
2018-10-25 22:27 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.20 KB, patch)
2018-10-25 22:28 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (11.75 KB, patch)
2018-10-25 22:29 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: recalls history (22.34 KB, patch)
2018-10-25 22:29 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recalls queue (14.54 KB, patch)
2018-10-25 22:30 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.51 KB, patch)
2018-10-25 22:30 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.32 KB, patch)
2018-10-25 22:30 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.83 KB, patch)
2018-10-25 22:31 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (20.12 KB, patch)
2018-10-25 22:31 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (7.00 KB, patch)
2018-10-25 22:32 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.92 KB, patch)
2018-10-25 22:32 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.36 KB, patch)
2018-10-25 22:33 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.07 KB, patch)
2018-10-25 22:33 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.61 KB, patch)
2018-10-25 22:34 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.77 KB, patch)
2018-10-25 22:34 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (1.02 KB, patch)
2018-10-25 22:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.40 KB, patch)
2018-10-25 22:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.05 KB, patch)
2018-10-25 22:36 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (39.70 KB, patch)
2018-10-25 22:36 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (30.48 KB, patch)
2018-10-25 22:36 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 (follow-up) Update characterset for recalls table (1.34 KB, patch)
2018-10-25 22:37 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Improve and refine recalls functionality (25.08 KB, patch)
2018-10-25 22:37 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Fixes to stop transfer recall modal from being displayed incorrectly (10.50 KB, patch)
2018-10-25 22:38 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Recalls for Course Reserves. (2.48 KB, patch)
2018-10-25 22:38 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Fix for recall OPAC confirmation failing when recall circ rule is empty (1.43 KB, patch)
2018-10-25 22:39 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Stopping an recalled item currently awaiting pickup from being able to be checked out to patrons other than the recall requester. (5.82 KB, patch)
2018-10-25 22:39 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Make the Recall confirmation popup appear everytime a recalled item is put through returns until it is checked out to recall requester (3.23 KB, patch)
2018-10-25 22:39 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - New RECALL_REQUESTER_DET notice and print option on confirm recall popup (11.91 KB, patch)
2018-10-25 22:40 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixing Internal Server Error thrown on C4/Circulation.pm (589 bytes, patch)
2018-10-25 22:40 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Implemented check if recall status equals 'R' before recall popup is shown (1.43 KB, patch)
2018-10-25 22:41 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Added conditional to check the recall has a status = 'W' before setting it to closed (1.33 KB, patch)
2018-10-25 22:41 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixed display of recall buttons on opac-course-details.pl (2.59 KB, patch)
2018-10-25 22:42 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Stopping recalls awaiting pickup to be issued to patrons other than the patron who recalled. (1.88 KB, patch)
2018-10-25 22:42 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Amended the detail.pl call to retrieve recalls so now it retrieves recalls with the status of 'R' or 'W' (1.41 KB, patch)
2018-10-25 22:43 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Stopping recalled items (recall status='R') from being renewed (2.36 KB, patch)
2018-10-25 22:43 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixed Internal Server error thrown upon returning recalled item (1.21 KB, patch)
2018-10-25 22:44 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fix t/db_dependent/Koha/Recalls.t (1.50 KB, patch)
2018-10-25 22:44 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Stop item status='Available' for waiting recalls (5.28 KB, patch)
2018-10-25 22:45 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Amended C4/Circulation->CanBookBeIssued() (5.42 KB, patch)
2018-10-25 22:46 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixed missing variable declaration error (1.08 KB, patch)
2018-10-25 22:46 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Added missing conditional check so now item availability for recalled items on OPAC search results page is corrected (1.39 KB, patch)
2018-10-25 22:47 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Added ability to set Recall due date interval, and Recall pickup period to hours (7.03 KB, patch)
2018-10-25 23:07 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Database updates (12.08 KB, patch)
2018-10-29 20:54 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Module files for Recall and OldRecall (16.55 KB, patch)
2018-10-29 20:56 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (5.61 KB, patch)
2018-10-29 20:56 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Some module fixes (9.88 KB, patch)
2018-10-29 20:57 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Circulation rules (7.74 KB, patch)
2018-10-29 20:58 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.15 KB, patch)
2018-10-29 20:59 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.83 KB, patch)
2018-10-29 21:00 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.20 KB, patch)
2018-10-29 21:00 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (11.75 KB, patch)
2018-10-29 21:01 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: recalls history (22.34 KB, patch)
2018-10-29 21:02 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recalls queue (14.54 KB, patch)
2018-10-29 21:02 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.51 KB, patch)
2018-10-29 21:03 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.32 KB, patch)
2018-10-29 21:03 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.83 KB, patch)
2018-10-29 21:04 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (20.12 KB, patch)
2018-10-29 21:05 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (7.00 KB, patch)
2018-10-29 21:05 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.92 KB, patch)
2018-10-29 21:07 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.36 KB, patch)
2018-10-29 21:08 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.07 KB, patch)
2018-10-29 21:09 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.61 KB, patch)
2018-10-29 21:09 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.77 KB, patch)
2018-10-29 21:12 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (1.02 KB, patch)
2018-10-29 21:13 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.40 KB, patch)
2018-10-29 21:13 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.05 KB, patch)
2018-10-29 21:34 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (39.70 KB, patch)
2018-10-29 21:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (30.48 KB, patch)
2018-10-29 21:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 (follow-up) Update characterset for recalls table (1.34 KB, patch)
2018-10-29 21:35 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532 - Improve and refine recalls functionality (25.08 KB, patch)
2018-10-29 21:36 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixes and enhancements to recalls (49.10 KB, patch)
2018-10-29 21:36 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: Fixes and enhancements to recalls (45.77 KB, patch)
2018-10-29 22:05 UTC, Alex Buckley
Details | Diff | Splinter Review
Bug 19532: (QA followup) Add missing TT filters (60.31 KB, patch)
2018-10-30 12:27 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Database updates (12.22 KB, patch)
2018-10-31 07:20 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Module files for Recall and OldRecall (16.56 KB, patch)
2018-10-31 07:20 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Some DB fixes (5.61 KB, patch)
2018-10-31 07:21 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Some module fixes (9.90 KB, patch)
2018-10-31 07:21 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Circulation rules (7.73 KB, patch)
2018-10-31 07:21 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Recall an item in OPAC (10.15 KB, patch)
2018-10-31 07:21 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Cancel recall and see recalls in OPAC (12.83 KB, patch)
2018-10-31 07:21 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Show recalls on intranet side (14.20 KB, patch)
2018-10-31 07:21 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Fixing broken OPAC recalls table (11.75 KB, patch)
2018-10-31 07:21 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: recalls history (22.34 KB, patch)
2018-10-31 07:22 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Recalls queue (14.54 KB, patch)
2018-10-31 07:22 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Overdue recalls report (12.51 KB, patch)
2018-10-31 07:22 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Recalls awaiting pickup report (15.36 KB, patch)
2018-10-31 07:22 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Only recall items checked out by other users (4.85 KB, patch)
2018-10-31 07:22 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: UseRecalls syspref (20.16 KB, patch)
2018-10-31 07:22 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Recall pop up when checking in an item (7.00 KB, patch)
2018-10-31 07:22 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Send notice to user to return a recalled item (1.93 KB, patch)
2018-10-31 07:23 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Send notice to user to pickup recalled returned item (3.37 KB, patch)
2018-10-31 07:23 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Flagging recall as 'old' when expired or cancelled (3.10 KB, patch)
2018-10-31 07:23 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Cronjob to check for overdue recalls (2.62 KB, patch)
2018-10-31 07:23 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Tests for Koha/Recalls (3.76 KB, patch)
2018-10-31 07:23 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Nice message if no recalls for opac recalls history (1.03 KB, patch)
2018-10-31 07:23 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: POD fix, renaming methods (13.38 KB, patch)
2018-10-31 07:23 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Extra fixes (15.03 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Notices for recalls (39.68 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Extra fixes from Comment 68 (30.61 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: (follow-up) Update characterset for recalls table (1.34 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Improve and refine recalls functionality (25.09 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Fixes and enhancements to recalls (45.79 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Add missing TT filters (60.31 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Use Asset plugin for css (3.46 KB, patch)
2018-10-31 07:24 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fix collation in kohastructure.sql (1.21 KB, patch)
2018-10-31 07:25 UTC, Martin Renvoize
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (69.52 KB, patch)
2020-04-28 22:06 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (9.73 KB, patch)
2020-04-28 22:07 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (9.77 KB, patch)
2020-04-28 22:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.38 KB, patch)
2020-04-29 05:54 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.12 KB, patch)
2020-04-29 05:54 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (18.24 KB, patch)
2020-04-29 05:54 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.38 KB, patch)
2020-04-29 21:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-04-29 21:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-04-29 21:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (18.24 KB, patch)
2020-04-29 21:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (18.72 KB, patch)
2020-04-30 06:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (8.85 KB, patch)
2020-04-30 06:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (14.18 KB, patch)
2020-04-30 06:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.18 KB, patch)
2020-05-01 05:43 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-01 05:43 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-01 05:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (18.72 KB, patch)
2020-05-01 05:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (8.85 KB, patch)
2020-05-01 05:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (21.62 KB, patch)
2020-05-01 05:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (19.65 KB, patch)
2020-05-04 06:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (8.85 KB, patch)
2020-05-04 06:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (23.49 KB, patch)
2020-05-04 06:17 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (38.99 KB, patch)
2020-05-04 06:17 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (753 bytes, patch)
2020-05-04 06:17 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.18 KB, patch)
2020-05-05 04:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-05 04:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-05 04:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (24.53 KB, patch)
2020-05-05 04:38 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (8.85 KB, patch)
2020-05-05 04:38 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (23.49 KB, patch)
2020-05-05 04:38 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (49.30 KB, patch)
2020-05-05 04:38 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (753 bytes, patch)
2020-05-05 04:38 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (24.63 KB, patch)
2020-05-05 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (8.85 KB, patch)
2020-05-05 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (23.49 KB, patch)
2020-05-05 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (49.30 KB, patch)
2020-05-05 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (753 bytes, patch)
2020-05-05 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.26 KB, patch)
2020-05-05 05:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (753 bytes, patch)
2020-05-05 05:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.36 KB, patch)
2020-05-06 06:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-06 06:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-06 06:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (30.98 KB, patch)
2020-05-06 06:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (8.85 KB, patch)
2020-05-06 06:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (23.49 KB, patch)
2020-05-06 06:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.23 KB, patch)
2020-05-06 06:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (39.21 KB, patch)
2020-05-06 06:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.94 KB, patch)
2020-05-07 07:14 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-07 07:14 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-07 07:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (32.65 KB, patch)
2020-05-07 07:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.46 KB, patch)
2020-05-07 07:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (28.99 KB, patch)
2020-05-07 07:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.23 KB, patch)
2020-05-07 07:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (88.46 KB, patch)
2020-05-07 07:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.94 KB, patch)
2020-05-08 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-08 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-08 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (33.01 KB, patch)
2020-05-08 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.46 KB, patch)
2020-05-08 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (33.14 KB, patch)
2020-05-08 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.23 KB, patch)
2020-05-08 04:02 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (123.78 KB, patch)
2020-05-08 04:02 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.94 KB, patch)
2020-05-11 06:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-11 06:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-11 06:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (33.29 KB, patch)
2020-05-11 06:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.46 KB, patch)
2020-05-11 06:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (37.19 KB, patch)
2020-05-11 06:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (52.69 KB, patch)
2020-05-11 06:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (127.15 KB, patch)
2020-05-11 06:30 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.91 KB, patch)
2020-05-12 05:51 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-12 05:51 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-12 05:51 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (34.93 KB, patch)
2020-05-12 05:51 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.46 KB, patch)
2020-05-12 05:52 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (37.17 KB, patch)
2020-05-12 05:52 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (53.76 KB, patch)
2020-05-12 05:52 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (129.37 KB, patch)
2020-05-12 05:52 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.99 KB, patch)
2020-05-13 06:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-13 06:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-13 06:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (35.50 KB, patch)
2020-05-13 06:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.46 KB, patch)
2020-05-13 06:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (58.50 KB, patch)
2020-05-13 06:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (53.76 KB, patch)
2020-05-13 06:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (129.37 KB, patch)
2020-05-13 06:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.99 KB, patch)
2020-05-13 06:35 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-13 06:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-13 06:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (35.50 KB, patch)
2020-05-13 06:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.46 KB, patch)
2020-05-13 06:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (61.36 KB, patch)
2020-05-13 06:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (50.88 KB, patch)
2020-05-13 06:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (129.37 KB, patch)
2020-05-13 06:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.02 KB, patch)
2020-05-14 05:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-14 05:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-14 05:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.51 KB, patch)
2020-05-14 05:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.57 KB, patch)
2020-05-14 05:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.25 KB, patch)
2020-05-14 05:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.10 KB, patch)
2020-05-14 05:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (131.98 KB, patch)
2020-05-14 05:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (130.49 KB, patch)
2020-05-14 23:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.02 KB, patch)
2020-05-15 04:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-15 04:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-15 04:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.51 KB, patch)
2020-05-15 04:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.84 KB, patch)
2020-05-15 04:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.25 KB, patch)
2020-05-15 04:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-05-15 04:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (130.39 KB, patch)
2020-05-15 04:34 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.02 KB, patch)
2020-05-15 06:30 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-05-15 06:30 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-05-15 06:30 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-05-15 06:31 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.79 KB, patch)
2020-05-15 06:31 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.25 KB, patch)
2020-05-15 06:31 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-05-15 06:31 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (130.43 KB, patch)
2020-05-15 06:31 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-05-18 02:41 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.79 KB, patch)
2020-05-18 02:41 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.25 KB, patch)
2020-05-18 02:41 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-05-18 02:41 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (130.43 KB, patch)
2020-05-18 02:41 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-06-24 23:22 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (130.36 KB, patch)
2020-06-24 23:23 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.99 KB, patch)
2020-06-29 04:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-06-29 04:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-06-29 04:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.59 KB, patch)
2020-06-29 04:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.78 KB, patch)
2020-06-29 04:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.21 KB, patch)
2020-06-29 04:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-06-29 04:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (130.34 KB, patch)
2020-06-29 04:47 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.97 KB, patch)
2020-07-13 05:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-07-13 05:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-07-13 05:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.59 KB, patch)
2020-07-13 05:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.78 KB, patch)
2020-07-13 05:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.21 KB, patch)
2020-07-13 05:33 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-07-13 05:34 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (130.34 KB, patch)
2020-07-13 05:34 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (132.73 KB, patch)
2020-07-14 05:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.97 KB, patch)
2020-07-22 22:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-07-22 22:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-07-22 22:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.58 KB, patch)
2020-07-22 22:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.78 KB, patch)
2020-07-22 22:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.23 KB, patch)
2020-07-22 22:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-07-22 22:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (133.83 KB, patch)
2020-07-22 22:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (71.97 KB, patch)
2020-08-04 23:03 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-08-04 23:03 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-08-04 23:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.58 KB, patch)
2020-08-04 23:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.78 KB, patch)
2020-08-04 23:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.22 KB, patch)
2020-08-04 23:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-08-04 23:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (133.85 KB, patch)
2020-08-04 23:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.09 KB, patch)
2020-08-06 23:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-08-06 23:26 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-08-06 23:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.58 KB, patch)
2020-08-06 23:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-08-06 23:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.49 KB, patch)
2020-08-06 23:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-08-06 23:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.25 KB, patch)
2020-08-06 23:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.18 KB, patch)
2020-08-14 04:55 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-08-14 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-08-14 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.59 KB, patch)
2020-08-14 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.86 KB, patch)
2020-08-14 04:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.53 KB, patch)
2020-08-14 04:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-08-14 04:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.38 KB, patch)
2020-08-14 04:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.17 KB, patch)
2020-08-24 11:48 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.78 KB, patch)
2020-08-24 11:48 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.33 KB, patch)
2020-08-24 11:49 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-08-31 05:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-08-31 05:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.42 KB, patch)
2020-08-31 05:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.74 KB, patch)
2020-08-31 05:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.29 KB, patch)
2020-08-31 05:12 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.20 KB, patch)
2020-08-31 05:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-08-31 05:15 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-08-31 05:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-08-31 05:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-08-31 05:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.42 KB, patch)
2020-08-31 05:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.74 KB, patch)
2020-08-31 05:16 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.29 KB, patch)
2020-08-31 05:17 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-09-01 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-09-01 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-09-01 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-09-01 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.48 KB, patch)
2020-09-01 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.74 KB, patch)
2020-09-01 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.29 KB, patch)
2020-09-01 21:59 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.26 KB, patch)
2020-09-09 00:43 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-09-09 00:43 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-09-09 00:43 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.63 KB, patch)
2020-09-09 00:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.86 KB, patch)
2020-09-09 00:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.52 KB, patch)
2020-09-09 00:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-09-09 00:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.37 KB, patch)
2020-09-09 00:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (63.32 KB, patch)
2020-09-09 03:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.77 KB, patch)
2020-09-09 03:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.37 KB, patch)
2020-09-09 03:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.21 KB, patch)
2020-10-05 00:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-10-05 00:27 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-10-05 00:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-10-05 00:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-10-05 00:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (63.01 KB, patch)
2020-10-05 00:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.84 KB, patch)
2020-10-05 00:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.76 KB, patch)
2020-10-05 00:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (72.38 KB, patch)
2020-10-23 23:03 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.02 KB, patch)
2020-10-23 23:03 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (949 bytes, patch)
2020-10-23 23:23 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.63 KB, patch)
2020-10-23 23:24 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.86 KB, patch)
2020-10-23 23:24 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.91 KB, patch)
2020-10-23 23:24 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.87 KB, patch)
2020-10-23 23:25 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.85 KB, patch)
2020-10-23 23:25 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.71 KB, patch)
2020-10-24 00:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.71 KB, patch)
2020-10-25 04:36 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Screenshots - Your account screens display issues for recalls (2020-10-26) (265.78 KB, application/pdf)
2020-10-26 01:46 UTC, David Nind
Details
Error trace - step 84 - circulation - recalls to pull (16.08 KB, text/plain)
2020-10-26 20:24 UTC, David Nind
Details
Bug 19532: Database and installer stuff (67.39 KB, patch)
2020-10-28 03:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-10-28 03:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-10-28 03:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-10-28 03:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-10-28 03:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.87 KB, patch)
2020-10-28 03:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.84 KB, patch)
2020-10-28 03:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (134.76 KB, patch)
2020-10-28 03:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.68 KB, patch)
2020-10-28 03:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.71 KB, patch)
2020-10-28 03:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.60 KB, patch)
2020-10-28 03:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-11-05 21:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-11-05 21:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-11-05 21:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-11-05 21:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.78 KB, patch)
2020-11-05 21:44 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.90 KB, patch)
2020-11-05 21:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.38 KB, patch)
2020-11-05 21:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.68 KB, patch)
2020-11-05 21:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.71 KB, patch)
2020-11-05 21:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.60 KB, patch)
2020-11-05 21:45 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.86 KB, patch)
2020-11-05 21:46 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (67.43 KB, patch)
2020-11-08 21:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.01 KB, patch)
2020-11-08 21:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (947 bytes, patch)
2020-11-08 21:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.61 KB, patch)
2020-11-08 21:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.85 KB, patch)
2020-11-08 21:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.78 KB, patch)
2020-11-08 21:28 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.90 KB, patch)
2020-11-08 21:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.39 KB, patch)
2020-11-08 21:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.68 KB, patch)
2020-11-08 21:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.71 KB, patch)
2020-11-08 21:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.60 KB, patch)
2020-11-08 21:29 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.86 KB, patch)
2020-11-08 21:30 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.31 KB, patch)
2020-11-08 21:30 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Remove bad merge conflict markers (791 bytes, patch)
2020-11-09 20:37 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (67.48 KB, patch)
2020-11-10 11:37 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.06 KB, patch)
2020-11-10 11:37 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (995 bytes, patch)
2020-11-10 11:37 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.66 KB, patch)
2020-11-10 11:37 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.90 KB, patch)
2020-11-10 11:37 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.83 KB, patch)
2020-11-10 11:37 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.95 KB, patch)
2020-11-10 11:38 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.44 KB, patch)
2020-11-10 11:38 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.73 KB, patch)
2020-11-10 11:38 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.75 KB, patch)
2020-11-10 11:38 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.65 KB, patch)
2020-11-10 11:38 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.90 KB, patch)
2020-11-10 11:39 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.36 KB, patch)
2020-11-10 11:39 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Remove bad merge conflict markers (839 bytes, patch)
2020-11-10 11:39 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (67.36 KB, patch)
2020-11-10 21:47 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (2.61 KB, patch)
2020-11-10 21:47 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (67.97 KB, patch)
2020-11-10 21:54 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Updated schema files (10.90 KB, patch)
2020-11-10 21:54 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (995 bytes, patch)
2020-11-10 21:54 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.64 KB, patch)
2020-11-10 21:54 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.88 KB, patch)
2020-11-10 21:55 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.79 KB, patch)
2020-11-10 21:55 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.86 KB, patch)
2020-11-10 21:55 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.20 KB, patch)
2020-11-10 21:55 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.66 KB, patch)
2020-11-10 21:55 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.75 KB, patch)
2020-11-10 21:55 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.62 KB, patch)
2020-11-10 21:56 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.90 KB, patch)
2020-11-10 21:56 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.36 KB, patch)
2020-11-10 21:56 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: (follow-up) Remove bad merge conflict markers (839 bytes, patch)
2020-11-10 21:56 UTC, Victor Grousset/tuxayo
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (68.03 KB, patch)
2021-01-31 21:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.08 KB, patch)
2021-01-31 21:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (995 bytes, patch)
2021-01-31 21:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.66 KB, patch)
2021-01-31 21:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.90 KB, patch)
2021-01-31 21:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.60 KB, patch)
2021-01-31 21:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.95 KB, patch)
2021-01-31 21:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.45 KB, patch)
2021-01-31 21:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.20 KB, patch)
2021-01-31 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.75 KB, patch)
2021-01-31 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.65 KB, patch)
2021-01-31 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.90 KB, patch)
2021-01-31 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.36 KB, patch)
2021-01-31 21:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Remove bad merge conflict markers (839 bytes, patch)
2021-01-31 21:59 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (68.50 KB, patch)
2021-03-16 02:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.73 KB, patch)
2021-03-16 02:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (995 bytes, patch)
2021-03-16 02:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.66 KB, patch)
2021-03-16 02:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.90 KB, patch)
2021-03-16 02:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.38 KB, patch)
2021-03-16 02:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (51.95 KB, patch)
2021-03-16 02:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.48 KB, patch)
2021-03-16 02:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (10.20 KB, patch)
2021-03-16 02:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.75 KB, patch)
2021-03-16 02:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.65 KB, patch)
2021-03-16 02:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.87 KB, patch)
2021-03-16 02:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.36 KB, patch)
2021-03-16 02:21 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Remove bad merge conflict markers (839 bytes, patch)
2021-03-16 02:21 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (51.15 KB, patch)
2021-07-21 03:47 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.16 KB, patch)
2021-07-21 03:47 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (995 bytes, patch)
2021-07-21 03:48 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.68 KB, patch)
2021-07-21 03:48 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.92 KB, patch)
2021-07-21 03:48 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.62 KB, patch)
2021-07-21 03:48 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (52.10 KB, patch)
2021-07-21 03:48 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.45 KB, patch)
2021-07-21 03:49 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (9.81 KB, patch)
2021-07-21 03:49 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.75 KB, patch)
2021-07-21 03:49 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.65 KB, patch)
2021-07-21 03:49 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.87 KB, patch)
2021-07-21 03:49 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.74 KB, patch)
2021-07-21 03:50 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (40.57 KB, patch)
2021-10-14 03:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.16 KB, patch)
2021-10-14 03:56 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (995 bytes, patch)
2021-10-14 03:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.71 KB, patch)
2021-10-14 03:57 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.92 KB, patch)
2021-10-14 03:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.91 KB, patch)
2021-10-14 03:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (50.53 KB, patch)
2021-10-14 03:58 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.05 KB, patch)
2021-10-14 03:59 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (9.80 KB, patch)
2021-10-14 03:59 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.75 KB, patch)
2021-10-14 04:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.65 KB, patch)
2021-10-14 04:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.87 KB, patch)
2021-10-14 04:00 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.74 KB, patch)
2021-10-14 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls and syspref settings (3.37 KB, patch)
2021-10-14 04:01 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.17 KB, patch)
2021-10-18 20:52 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (9.80 KB, patch)
2021-10-18 20:52 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.75 KB, patch)
2021-10-18 20:52 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.65 KB, patch)
2021-10-18 20:53 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.87 KB, patch)
2021-10-18 20:53 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.74 KB, patch)
2021-10-18 20:53 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls and syspref settings (3.37 KB, patch)
2021-10-18 20:53 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests (2.50 KB, patch)
2021-10-18 20:53 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and can_be_recalled checks (5.32 KB, patch)
2021-10-19 03:22 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and can_be_recalled checks (6.36 KB, patch)
2021-10-19 03:23 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks (10.59 KB, patch)
2021-10-20 04:14 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (40.57 KB, patch)
2021-10-20 10:06 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.19 KB, patch)
2021-10-20 10:06 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (1.02 KB, patch)
2021-10-20 10:07 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.74 KB, patch)
2021-10-20 10:08 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.94 KB, patch)
2021-10-20 10:08 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (62.92 KB, patch)
2021-10-20 10:08 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (50.50 KB, patch)
2021-10-20 10:09 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (149.98 KB, patch)
2021-10-20 10:09 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (9.79 KB, patch)
2021-10-20 10:10 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.80 KB, patch)
2021-10-20 10:10 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.67 KB, patch)
2021-10-20 10:11 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.91 KB, patch)
2021-10-20 10:11 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.79 KB, patch)
2021-10-20 10:11 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks (10.52 KB, patch)
2021-10-20 10:12 UTC, David Nind
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (40.61 KB, patch)
2022-01-11 15:58 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.58 KB, patch)
2022-01-11 15:58 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (1.06 KB, patch)
2022-01-11 15:58 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.78 KB, patch)
2022-01-11 15:59 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.98 KB, patch)
2022-01-11 15:59 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (63.11 KB, patch)
2022-01-11 15:59 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (50.54 KB, patch)
2022-01-11 15:59 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.08 KB, patch)
2022-01-11 16:00 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (9.83 KB, patch)
2022-01-11 16:00 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.84 KB, patch)
2022-01-11 16:00 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.70 KB, patch)
2022-01-11 16:01 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.95 KB, patch)
2022-01-11 16:01 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.83 KB, patch)
2022-01-11 16:01 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks (10.56 KB, patch)
2022-01-11 16:01 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Enable XSLT statuses translation (1.41 KB, patch)
2022-01-11 16:02 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (40.62 KB, patch)
2022-02-16 04:04 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Updated schema files (11.21 KB, patch)
2022-02-16 04:05 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall (1.02 KB, patch)
2022-02-16 04:05 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (36.76 KB, patch)
2022-02-16 04:05 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (9.96 KB, patch)
2022-02-16 04:06 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (63.22 KB, patch)
2022-02-16 04:06 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (50.58 KB, patch)
2022-02-16 04:07 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.42 KB, patch)
2022-02-16 04:07 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (9.85 KB, patch)
2022-02-16 04:08 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.80 KB, patch)
2022-02-16 04:08 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.70 KB, patch)
2022-02-16 04:09 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (4.91 KB, patch)
2022-02-16 04:09 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.79 KB, patch)
2022-02-16 04:10 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks (10.64 KB, patch)
2022-02-16 04:10 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Enable XSLT statuses translation (1.38 KB, patch)
2022-02-16 04:10 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixes along recall workflow (11.35 KB, patch)
2022-02-16 04:11 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fixing unit tests (2.51 KB, patch)
2022-02-25 10:31 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks (10.29 KB, patch)
2022-02-27 23:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Enable XSLT statuses translation (1.38 KB, patch)
2022-02-27 23:18 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixes along recall workflow (11.38 KB, patch)
2022-02-27 23:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fixing unit tests (2.48 KB, patch)
2022-02-27 23:19 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix for wantarray change and title-string (6.84 KB, patch)
2022-02-27 23:20 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fix few Koha::Recalls->search occurrences (3.09 KB, patch)
2022-03-01 15:40 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Removing unnecessary code (966 bytes, patch)
2022-03-01 22:55 UTC, Aleisha Amohia
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fix fine calculation by inserting biblionumber (1.94 KB, patch)
2022-03-02 14:41 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Move as_list to iterator based loop (1.84 KB, patch)
2022-03-02 15:30 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Database and installer stuff (40.66 KB, patch)
2022-03-02 15:50 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: [DBIx] Updated schema files (10.79 KB, patch)
2022-03-02 15:51 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: [DBIx] Add boolean flags to recalls.old and recalls.item_level_recall (1.12 KB, patch)
2022-03-02 15:51 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: [DBIx] Schema change for Recalls (1.62 KB, patch)
2022-03-02 15:51 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls objects and tests (35.65 KB, patch)
2022-03-02 15:51 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation (10.04 KB, patch)
2022-03-02 15:52 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Other objects used in recalls feature (63.15 KB, patch)
2022-03-02 15:52 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls on OPAC (50.59 KB, patch)
2022-03-02 15:52 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: Recalls on intranet (150.27 KB, patch)
2022-03-02 15:52 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more (9.89 KB, patch)
2022-03-02 15:52 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing failing CalcFine.t test (1.90 KB, patch)
2022-03-02 15:53 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing OPAC display and staff client errors (8.76 KB, patch)
2022-03-02 15:53 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall (5.01 KB, patch)
2022-03-02 15:53 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixing tests and QA tools (7.88 KB, patch)
2022-03-02 15:53 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks (10.25 KB, patch)
2022-03-02 15:54 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Enable XSLT statuses translation (1.47 KB, patch)
2022-03-02 15:54 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fixes along recall workflow (11.36 KB, patch)
2022-03-02 15:54 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fixing unit tests (2.57 KB, patch)
2022-03-02 15:54 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (follow-up) Fix for wantarray change and title-string (6.93 KB, patch)
2022-03-02 15:55 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fix few Koha::Recalls->search occurrences (3.14 KB, patch)
2022-03-02 15:55 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fix fine calculation by inserting biblionumber (1.94 KB, patch)
2022-03-02 15:55 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Move as_list to iterator based loop (1.84 KB, patch)
2022-03-02 15:55 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Add the cron jobs to the cron files (2.41 KB, patch)
2022-03-03 15:09 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Better relationship names (2.85 KB, patch)
2022-03-11 19:56 UTC, Tomás Cohen Arazi
Details | Diff | Splinter Review
Bug 19532: Make recalls.status an ENUM (51.71 KB, patch)
2022-03-11 19:56 UTC, Tomás Cohen Arazi
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Simplify resultset accessors (16.68 KB, patch)
2022-03-11 19:56 UTC, Tomás Cohen Arazi
Details | Diff | Splinter Review
Bug 19532: Make recalls.status an ENUM (46.62 KB, patch)
2022-03-14 16:16 UTC, Tomás Cohen Arazi
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Simplify resultset accessors (16.68 KB, patch)
2022-03-14 16:16 UTC, Tomás Cohen Arazi
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) POD and import fixes (1.80 KB, patch)
2022-03-14 16:17 UTC, Tomás Cohen Arazi
Details | Diff | Splinter Review
Bug 19532: (QA follow-up) Fixing typo (935 bytes, patch)
2022-03-15 02:17 UTC, Aleisha Amohia
Details | Diff | Splinter Review
fix installation data for Unimarc (1.26 KB, patch)
2022-03-28 13:52 UTC, Arthur Suzuki
Details | Diff | Splinter Review

Note You need to log in before you can comment on or make changes to this bug.
Description Liz Rea 2017-10-25 23:27:56 UTC
Preface: 

I know this will be quite an interesting feature for lots of people. Catalyst is doing a working proof of concept for this feature. The requirements we have given to Aleisha are firm, and we will not be scope creeping them. Additional features are welcome once this initial development is either accepted or supplanted by something else.

That said, we welcome comment and suggestions on the patches we will attach here, and view this as a starting point instead of a complete solution.

Expected scope of the feature to include: 

- Ability for borrowers to place a recall on a book from the OPAC results and detail, if it is checked out (question, do we offer to issue a recall if only one copy of say 3 is checked out?)

- Ability for borrowers to see their requested recalls, and the when the book is expected to be returned back

- An interface similar to holds for recalls, that alerts librarians that a book needs to go on the recall shelf (Recall for User, confirm or cancel) 

- An interface similar to holds waiting to show recalls that are currently on the shelf, and recalls that are requested but overdue, and ones that have expired and need to be reshelved.

- A view in the intranet user interface for librarians to see a borrower's recalls (similar to holds)

- Notices for borrower who has the recalled book on issue, to notify that the book's due date has changed and for the recaller, to let them know when the recalled item is ready for pick up.

- Something in the circ rules that defines whether an item type/borrower category is allowed to place recalls on an item.

- Sysprefs for "days from now that item is now due" and "how long do I let this recall languish on the recall shelf before reshelving"

Current implementation notes:

* DB: recalls table
• DB: old_recalls table

• notices: to user who has an item checked out that a recall request has been placed on, saying request has been made and due date has been updated (may use or build upon existing code from 17509)
• notices: to user who made the recall request when it has been checked in, saying the item is awaiting pickup and must be picked up within X days (may use or build upon existing code from 17509)

• OPAC: in checked out tab on user summary page, show your item has a recall placed on it, highlighting the new due date
• OPAC: recall button under availability on record detail page and results page
• OPAC: recalls tab on user summary page

Per item type/borrower category combination:
• circ rules: recall due date interval - what is the new due date of the item being recalled? How many days from the date of recall do we set the new due date?
• circ rules: recall overdue fine - Do we have a special fine on an item that was recalled but not returned on time? (this may be a phase two feature)
• circ rules: recall shelf time (how long can it be awaiting pickup before it needs to be reshelved)
• circ rules OR syspref: do recalls automatically expire? (this may be a phase two feature)

• circ reports: overdue recalls 
• circ reports: recalls awaiting pickup / recalls waiting over X days
• circ reports: recalls queue

• intranet: recalls tab on member detail page, showing recalls that the borrower has requested. 
• intranet: highlight on checkout and detail page items with a recall due date.
• intranet: alert when checking in an item with a recall
Comment 1 Aleisha Amohia 2017-10-25 23:46:00 UTC Comment hidden (obsolete)
Comment 2 Aleisha Amohia 2017-10-26 01:02:19 UTC Comment hidden (obsolete)
Comment 3 Aleisha Amohia 2017-10-26 01:04:52 UTC Comment hidden (obsolete)
Comment 4 Aleisha Amohia 2017-10-26 01:06:54 UTC Comment hidden (obsolete)
Comment 5 Jonathan Druart 2017-10-26 13:30:47 UTC
(In reply to Liz Rea from comment #0)
> Current implementation notes:
> 
> * DB: recalls table
> • DB: old_recalls table

Regarding the number of critical issues we had the last few months, I do not think it is a good idea to reuse this pattern.
We should not move data from one table to another but add a deleted/old flag instead.
Comment 6 Aleisha Amohia 2017-10-26 21:25:10 UTC Comment hidden (obsolete)
Comment 7 Aleisha Amohia 2017-10-26 21:32:32 UTC Comment hidden (obsolete)
Comment 8 Aleisha Amohia 2017-10-26 21:42:55 UTC Comment hidden (obsolete)
Comment 9 Aleisha Amohia 2017-10-26 21:45:26 UTC Comment hidden (obsolete)
Comment 10 Aleisha Amohia 2017-10-27 03:07:44 UTC Comment hidden (obsolete)
Comment 11 Aleisha Amohia 2017-11-13 01:26:12 UTC Comment hidden (obsolete)
Comment 12 Aleisha Amohia 2017-11-13 02:36:39 UTC Comment hidden (obsolete)
Comment 13 Aleisha Amohia 2017-11-14 21:56:42 UTC Comment hidden (obsolete)
Comment 14 Aleisha Amohia 2017-11-14 22:01:21 UTC Comment hidden (obsolete)
Comment 15 Aleisha Amohia 2017-11-15 01:16:09 UTC Comment hidden (obsolete)
Comment 16 Aleisha Amohia 2017-11-15 22:27:20 UTC Comment hidden (obsolete)
Comment 17 Aleisha Amohia 2017-11-16 00:56:25 UTC Comment hidden (obsolete)
Comment 18 Aleisha Amohia 2017-11-19 22:24:32 UTC Comment hidden (obsolete)
Comment 19 Aleisha Amohia 2017-11-20 00:51:51 UTC Comment hidden (obsolete)
Comment 20 Aleisha Amohia 2017-11-20 02:35:12 UTC Comment hidden (obsolete)
Comment 21 Aleisha Amohia 2017-11-24 00:55:00 UTC Comment hidden (obsolete)
Comment 22 Aleisha Amohia 2017-11-27 00:51:50 UTC Comment hidden (obsolete)
Comment 23 Aleisha Amohia 2017-11-27 01:21:08 UTC Comment hidden (obsolete)
Comment 24 Aleisha Amohia 2017-11-27 22:21:55 UTC Comment hidden (obsolete)
Comment 25 Aleisha Amohia 2017-11-28 01:39:14 UTC Comment hidden (obsolete)
Comment 26 Aleisha Amohia 2017-11-28 04:10:22 UTC Comment hidden (obsolete)
Comment 27 Aleisha Amohia 2017-11-28 04:21:27 UTC Comment hidden (obsolete)
Comment 28 Aleisha Amohia 2017-11-28 04:38:46 UTC
I believe that this feature is now ready to test. I'll be away for the next couple of weeks, but feel free to test and leave any feedback/comments/questions/ideas that I can come back to when I return.
Note: when testing, it will be very helpful to keep the OPAC and the Staff Client open in 2 separate tabs or browsers. you will also need 2 borrowers, where at least one has superlibrarian privileges.

TEST PLAN:

1. Enable the UseRecalls syspref
2. Go to Circulation and Fines Rules. Put some numbers in the recalls fields (recall due date interval, recall overdue fine amount, recall pickup period)
3. Put a number in the RecallsMaxPickUpDelay syspref. This will be the default number of days used if the recall pickup period isn't set in Step 2
4. Check out an item to a patron
5. Go to that item's detail page in the OPAC. Notice the holdings table says 'Checked out'
6. Log in to the OPAC with another patron and go back to that detail page. The holdings table should now have a Recall link next to the 'Checked out' text
7. Click the Recall button and confirm the Recall
8. Go to the user's opac summary and confirm there is now a Recalls tab, with the correct number of recalls (should be 1).
9. Test cancelling the recall by clicking Cancel. Confirm the recall has been cancelled. Repeat steps 6 and 7.
10. In the left navigation, there will also be a 'recalls history' tab. Click it. There should be a log, similar to reading history, with the cancelled recall and the new recall in it. Confirm all information is correct
11. Again, test cancelling the recall. Repeat steps 6 and 7.
12. In the staff interface, go to the logged in user's checkouts. Confirm you can see a new Recalls tab, with the active (not cancelled) recall in the table. Should be the same for the details tab also.
13. Test cancelling works for both of these again, and making new recalls again.
14. Check in the recalled item. You should see a pop up, asking to confirm the recall as waiting. Click confirm.
15. Go to the Circulation main page. You should see 3 new reports: recalls queue, overdue recalls and recalls awaiting pickup
16. Go to the recalls queue, confirm you can see an entire history of recalls at your library. Confirm cancel works when selecting checkboxes and clicking the multiple button. If you do this, you'll need to place the recall again and check the item in again
17. Go to recalls awaiting pickup. You should see the recall under the recalls waiting tab
18. in Mysql, set the waitingdate for your recall to be more than 'recall pickup period' days before today's date
19. Refresh the recalls awaiting pickup page. You should see the recall under the recalls waiting tab, and the recalls waiting more than X days tab.
20. expire the recall. confirm this is expired by checking the recalls queue
21. place another recall, but do not check it in
22. in mysql, set the date_due of the checkout (issues table) to be at least 'recall due date interval' number of days before today's date
23. run the overdue_notices.pl cronjob
24. go to the overdue recalls circ report and confirm your recall shows there
25. try cancelling the recall here also
26. in mysql, check the message_queue and confirm there have been the appropriate number of RETURN_RECALLED_ITEM and PICKUP_RECALLED_ITEM notices sent with the correct to and from addresses and other content
27. test t/db_dependent/Koha/Recalls.t
Comment 29 Petter Goksøyr Åsen 2017-11-28 07:13:39 UTC
Quick comment:
Given the troubles we have with duplicate primary keys in old/deleted tables, would't it be better to drop the old_recalls table, and keep it in one table, with a flag denoting if the recall is deleted or not?
Comment 30 Jonathan Druart 2017-11-28 12:53:18 UTC
(In reply to Petter Goksøyr Åsen from comment #29)
> Quick comment:
> Given the troubles we have with duplicate primary keys in old/deleted
> tables, would't it be better to drop the old_recalls table, and keep it in
> one table, with a flag denoting if the recall is deleted or not?

Yes, see comment 5 as well.
Aleisha, did you consider this alternative?
Comment 31 Chris Cormack 2017-11-28 20:35:51 UTC
(In reply to Jonathan Druart from comment #30)
> (In reply to Petter Goksøyr Åsen from comment #29)
> > Quick comment:
> > Given the troubles we have with duplicate primary keys in old/deleted
> > tables, would't it be better to drop the old_recalls table, and keep it in
> > one table, with a flag denoting if the recall is deleted or not?
> 
> Yes, see comment 5 as well.
> Aleisha, did you consider this alternative?

We did, but the reason old_issues exists, is because keeping it one massive table becomes really slow quite fast.

With recalls this probably will take longer to be a problem, but having circulation stuff slowed down (specifically returns) by having millions of rows to check through was the reason the issues table was split in the first place.
I don't believe one table that grows forever for circulation is a viable fix.
Comment 32 Petter Goksøyr Åsen 2017-11-29 06:14:04 UTC
Fair enough, but optimizing by allowing for potential data corruption seems the wrong way to optimize to me :)

Isn't data integrity is more important?
Comment 33 Chris Cormack 2017-11-29 06:18:24 UTC
(In reply to Petter Goksøyr Åsen from comment #32)
> Fair enough, but optimizing by allowing for potential data corruption seems
> the wrong way to optimize to me :)
> 
> Isn't data integrity is more important?

It was fine for 15 years, until mysql changed things. And after that we didn't have any data loss until we rushed a fix.
A combined table is not a valid fix, you can have all the data integrity you want if the system is too slow to use. We should come up with an actual solution.
Comment 34 Petter Goksøyr Åsen 2017-11-29 06:23:39 UTC
Yeah, this probably needs a broader discussion, best handeled elsewhere. I'll leave it for now and let this bug be about recalls :)
Comment 35 Tomás Cohen Arazi 2017-11-29 17:56:02 UTC
Comment on attachment 68572 [details] [review]
Bug 19532: Module files for Recall and OldRecall

>Koha/Recall.pm
>Koha/Recalls.pm
>Koha/Old/Recall.pm
>Koha/Old/Recalls.pm
>and the schema files for Recall and OldRecall.

I agree we should avoid old_*, probably index definitions are relevant for performance (speed, because they will eat more hard disk space of course).

>+=head2 Class Methods

This are usually labeled 'Internal methods', to distinguish them from public 'Class methods'. Fix the case.

>+=head3 type
>+
>+=cut
>+
>+sub type {
>+    return 'OldRecall';
>+}

This should be called '_type'. Look at Koha/Object.pm:260, a sample place it is used. If it is not well documented, please file a bug for it!

>+=head2 found
>+
>+  data_type: 'varchar'
>+  is_nullable: 1
>+  size: 1

Please use tinyint(1) for booleans. While it is not a real type (it is an integer with a mask), it clearly denotes its use. If you plan to expose this through the api, having it be VARCHAR will make our stack consider it a string. If you set it a numeric type, then we can add:

__PACKAGE_->add_columns({

  '+found' => { is_boolean => 1 }

});

to the schema file, and thus it is considered a Boolean when rendering on the API.
Comment 36 Tomás Cohen Arazi 2017-11-29 18:00:16 UTC
Comment on attachment 69102 [details] [review]
Bug 19532: Cancel recall and see recalls in OPAC


>+=head3 branch
>+
>+Returns the related Koha::Library object for this Hold
>+
>+=cut
>+
>+sub branch {
>+    my ($self) = @_;
>+
>+    $self->{_branch} ||= Koha::Libraries->find( $self->branchcode() );
>+
>+    return $self->{_branch};
>+}

Please call this method 'library' instead, and 'patron' instead of 'borrower' on the followup.
Comment 37 Liz Rea 2017-11-30 03:08:44 UTC
These are functionality notes for Aleisha

OPAC client view:

We probably want to show the borrower when the book is now expected to be returned by on /cgi-bin/koha/opac-recalls.pl

Staff views:

- syspref needs to be defaulted to off please :)

/cgi-bin/koha/circ/recalls_queue.pl
- probably want to see the new due date here as well

/cgi-bin/koha/catalogue/detail.pl?biblionumber=16
- do we want to see what the old due date was here? (to think about, not required)
- Probably want to show somewhere in the item table that there is a recall, and for whom (kinda like we do with holds)
- do we want a tab on the detail page that shows all of the recalls for this biblio, and who they are for?

General questions: 

- If we add an item with the same item type to a biblio that has a recall, should checking in this newly available item trigger the recall to be filled?

I'm out of time for this run at it, but honestly what a great first whack at it.
Comment 38 Owen Leonard 2017-11-30 19:48:06 UTC
I can't get this to apply!

Apply? [(y)es, (n)o, (i)nteractive] y
Applying: Bug 19532: Database updates
Applying: Bug 19532: Notices for recalls
Applying: Bug 19532: Module files for Recall and OldRecall
Applying: Bug 19532: Some DB fixes
Applying: Bug 19532: Some module fixes
Applying: Bug 19532: Circulation rules
fatal: sha1 information is lacking or useless (Koha/Schema/Result/Issuingrule.pm).
Repository lacks necessary blobs to fall back on 3-way merge.
Comment 39 Liz Rea 2017-11-30 21:38:05 UTC
Hi Owen,

This patch: 
 Bug 19532: Circulation rules (8.52 KB, patch) 

Is out of band and doesn't work properly. We did some heroics at Catalyst because we needed to do some testing on this bug, but that patch will need to be fixed by Aleisha.

Cheers,
Liz
Comment 40 Liz Rea 2017-11-30 21:39:00 UTC
(Basically, if you skip that one, the rest will apply. Then you just have to sort out what the bad patch was trying to do, and add that back in.)
Comment 41 Kyle M Hall 2017-12-11 18:32:39 UTC
> We did, but the reason old_issues exists, is because keeping it one massive
> table becomes really slow quite fast.

I think maybe we need to check our assumptions. We may have be running on best practices that are out of date. I think that happens to us all from time to time.

MySQL is capable of dealing with tens or even hundreds of millions of rows very speedily, as long as the correct indexes are in place.

For example, I picked out a database to test with from a Koha consortium. They have  1,456,666 old_issues rows, and 50122 issues rows.

Searching on a column with no index ( such as issuedate ) returned a single record from almost 1.5 million records in 1.04 seconds. Not terrible, but definitely not great. However, searching for the same row using an indexed column took less time than mysql could measure! It reported back taking 0.00 seconds ; )

I've done some digging and it appears that many people are using mysql for tables with tens to hundreds of millions of rows with no adverse effects.

Perhaps that was an issue during the early years of Koha, when MySQL was much less mature, but I don't think it is anymore.
Comment 42 Tomás Cohen Arazi 2017-12-11 18:41:15 UTC
(In reply to Kyle M Hall from comment #41)
> > We did, but the reason old_issues exists, is because keeping it one massive
> > table becomes really slow quite fast.
> 
> I think maybe we need to check our assumptions. We may have be running on
> best practices that are out of date. I think that happens to us all from
> time to time.
> 
> MySQL is capable of dealing with tens or even hundreds of millions of rows
> very speedily, as long as the correct indexes are in place.
> 
> For example, I picked out a database to test with from a Koha consortium.
> They have  1,456,666 old_issues rows, and 50122 issues rows.
> 
> Searching on a column with no index ( such as issuedate ) returned a single
> record from almost 1.5 million records in 1.04 seconds. Not terrible, but
> definitely not great. However, searching for the same row using an indexed
> column took less time than mysql could measure! It reported back taking 0.00
> seconds ; )
> 
> I've done some digging and it appears that many people are using mysql for
> tables with tens to hundreds of millions of rows with no adverse effects.
> 
> Perhaps that was an issue during the early years of Koha, when MySQL was
> much less mature, but I don't think it is anymore.

I think this was introduced at some point to ease the use of TRUNCATE as opposed to DELETE when wiping old data.

There are other ways to deal with fragmentation already (OPTIMIZE?), so I'd suggest the tables are joined and a proper use of tinyint for the flags.
Comment 43 Aleisha Amohia 2017-12-14 23:00:57 UTC
Hi all, sorry for the delay in getting back to you, I've been away.

I removed the old_recalls table and added an 'old' flag to the recalls table in the 'Some DB fixes' patch.

I'll now get on to fixing all of the other comments.
Comment 44 Aleisha Amohia 2017-12-18 03:04:01 UTC Comment hidden (obsolete)
Comment 45 Aleisha Amohia 2017-12-19 01:32:36 UTC Comment hidden (obsolete)
Comment 46 Aleisha Amohia 2017-12-19 01:44:01 UTC Comment hidden (obsolete)
Comment 47 Aleisha Amohia 2017-12-19 01:44:07 UTC Comment hidden (obsolete)
Comment 48 Aleisha Amohia 2017-12-19 01:44:14 UTC Comment hidden (obsolete)
Comment 49 Aleisha Amohia 2017-12-19 01:44:20 UTC Comment hidden (obsolete)
Comment 50 Aleisha Amohia 2017-12-19 01:44:26 UTC Comment hidden (obsolete)
Comment 51 Aleisha Amohia 2017-12-19 01:44:32 UTC Comment hidden (obsolete)
Comment 52 Aleisha Amohia 2017-12-19 01:44:38 UTC Comment hidden (obsolete)
Comment 53 Aleisha Amohia 2017-12-19 01:44:46 UTC Comment hidden (obsolete)
Comment 54 Aleisha Amohia 2017-12-19 01:44:52 UTC Comment hidden (obsolete)
Comment 55 Aleisha Amohia 2017-12-19 01:44:58 UTC Comment hidden (obsolete)
Comment 56 Aleisha Amohia 2017-12-19 01:45:03 UTC Comment hidden (obsolete)
Comment 57 Aleisha Amohia 2017-12-19 01:45:09 UTC Comment hidden (obsolete)
Comment 58 Aleisha Amohia 2017-12-19 01:45:15 UTC Comment hidden (obsolete)
Comment 59 Aleisha Amohia 2017-12-19 01:45:20 UTC Comment hidden (obsolete)
Comment 60 Aleisha Amohia 2017-12-19 01:45:25 UTC Comment hidden (obsolete)
Comment 61 Aleisha Amohia 2017-12-19 01:45:30 UTC Comment hidden (obsolete)
Comment 62 Aleisha Amohia 2017-12-19 01:45:36 UTC Comment hidden (obsolete)
Comment 63 Aleisha Amohia 2017-12-19 01:45:44 UTC Comment hidden (obsolete)
Comment 64 Aleisha Amohia 2017-12-19 01:49:03 UTC
Sorry for the gazillions of emails! This should now apply cleanly on master.
I should've added in the original test plan to update the database and the schema after applying patches, so make sure you do that first! Here's the test plan again.

TEST PLAN:

0. Update database and schema
1. Enable the UseRecalls syspref
2. Go to Circulation and Fines Rules. Put some numbers in the recalls fields (recall due date interval, recall overdue fine amount, recall pickup period)
3. Put a number in the RecallsMaxPickUpDelay syspref. This will be the default number of days used if the recall pickup period isn't set in Step 2
4. Check out an item to a patron
5. Go to that item's detail page in the OPAC. Notice the holdings table says 'Checked out'
6. Log in to the OPAC with another patron and go back to that detail page. The holdings table should now have a Recall link next to the 'Checked out' text
7. Click the Recall button and confirm the Recall
8. Go to the user's opac summary and confirm there is now a Recalls tab, with the correct number of recalls (should be 1).
9. Test cancelling the recall by clicking Cancel. Confirm the recall has been cancelled. Repeat steps 6 and 7.
10. In the left navigation, there will also be a 'recalls history' tab. Click it. There should be a log, similar to reading history, with the cancelled recall and the new recall in it. Confirm all information is correct
11. Again, test cancelling the recall. Repeat steps 6 and 7.
12. In the staff interface, go to the logged in user's checkouts. Confirm you can see a new Recalls tab, with the active (not cancelled) recall in the table. Should be the same for the details tab also.
13. Test cancelling works for both of these again, and making new recalls again.
14. Check in the recalled item. You should see a pop up, asking to confirm the recall as waiting. Click confirm.
15. Go to the Circulation main page. You should see 3 new reports: recalls queue, overdue recalls and recalls awaiting pickup
16. Go to the recalls queue, confirm you can see an entire history of recalls at your library. Confirm cancel works when selecting checkboxes and clicking the multiple button. If you do this, you'll need to place the recall again and check the item in again
17. Go to recalls awaiting pickup. You should see the recall under the recalls waiting tab
18. in Mysql, set the waitingdate for your recall to be more than 'recall pickup period' days before today's date
19. Refresh the recalls awaiting pickup page. You should see the recall under the recalls waiting tab, and the recalls waiting more than X days tab.
20. expire the recall. confirm this is expired by checking the recalls queue
21. place another recall, but do not check it in
22. in mysql, set the date_due of the checkout (issues table) to be at least 'recall due date interval' number of days before today's date
23. run the overdue_notices.pl cronjob
24. go to the overdue recalls circ report and confirm your recall shows there
25. try cancelling the recall here also
26. in mysql, check the message_queue and confirm there have been the appropriate number of RETURN_RECALLED_ITEM and PICKUP_RECALLED_ITEM notices sent with the correct to and from addresses and other content
27. test t/db_dependent/Koha/Recalls.t
Comment 65 Aleisha Amohia 2017-12-21 03:38:13 UTC Comment hidden (obsolete)
Comment 66 Aleisha Amohia 2017-12-22 01:03:28 UTC Comment hidden (obsolete)
Comment 67 Aleisha Amohia 2017-12-22 01:06:01 UTC
(In reply to Liz Rea from comment #37)
> These are functionality notes for Aleisha
> 
> OPAC client view:
> 
> We probably want to show the borrower when the book is now expected to be
> returned by on /cgi-bin/koha/opac-recalls.pl

done

> 
> Staff views:
> 
> - syspref needs to be defaulted to off please :)

done

> 
> /cgi-bin/koha/circ/recalls_queue.pl
> - probably want to see the new due date here as well

done

> 
> /cgi-bin/koha/catalogue/detail.pl?biblionumber=16
> - do we want to see what the old due date was here? (to think about, not
> required)

i think having the old and the new due date might cause some confusion

> - Probably want to show somewhere in the item table that there is a recall,
> and for whom (kinda like we do with holds)

done

> - do we want a tab on the detail page that shows all of the recalls for this
> biblio, and who they are for?

done 

> 
> General questions: 
> 
> - If we add an item with the same item type to a biblio that has a recall,
> should checking in this newly available item trigger the recall to be filled?

i'm not too sure about this. recalls are item-level not record-level so i haven't quite thought about how other available items could fill the recall. perhaps a future cronjob? maybe after this base feature gets through?

> 
> I'm out of time for this run at it, but honestly what a great first whack at
> it.

i've now implemented all of the discussed comments etc and i believe this is ready to test
Comment 68 Nick Clemens 2018-01-26 15:33:35 UTC
Hi Aleisha,

Overall things work well and are pretty intuitive.

Can you squash some of the patches to ease readability? (e.e. the removed old_recalls stuff)

Couple errors:
The db uppdate tries to insert after 'notes' in issuing rules, but this doesn't exist

When placing recall I always get a warning:
    <p><strong>Warning</strong>: Your library does not allow recalls for x item types.</p>

Cancelling recall from 'Recall history tab' doesn't work

If patron has no recalls there is 'Patron has no current recalls' message at bottom of tabs on checkout and details tabs for patron

When confirming a recall if the item is from another branch I get a transfer generated as well as confirming hold for recall

On recalls awaiting pickup: 
    need to update recall.borrower to recall.patron - causing internal server error


When placing a recall - if I hit 'back' after confirming and confirm again I get a second recall on the same item

Recalls queue should have waiting date information 
Recalls queue should have a way to hide cancelled, I would expect closed recalls to be hidden by default
Could overdue recalls be a tab/filter on the recalls queue?

When viewing a patrons account in the staff side we should see that a checkout has an active recall

Checking out the recall doesn't seem to close the recall

Question - 
    should canceling a recall extend the due date? or notify patron somehow?
    is calendar used to calculate new due date for recall? I think it should be
    I think circ rules should include 'number of open recalls' to (optionally) limit how many a patron can have
    Is it valid for two patrons to recall the second item? I would think the second one not be a hold? 

-Nick
Comment 69 Aleisha Amohia 2018-02-12 02:53:58 UTC Comment hidden (obsolete)
Comment 70 Katrin Fischer 2018-02-12 06:11:29 UTC
Hi Aleihsa, please keep in mind that the notices need to be added to all the translated installers as well. It's ok to add them in English, but they should be there to ease translation and don't have different behaviour.
Comment 71 Aleisha Amohia 2018-02-13 22:00:14 UTC Comment hidden (obsolete)
Comment 72 Aleisha Amohia 2018-02-13 22:00:21 UTC Comment hidden (obsolete)
Comment 73 Aleisha Amohia 2018-02-13 22:00:27 UTC Comment hidden (obsolete)
Comment 74 Aleisha Amohia 2018-02-13 22:00:32 UTC Comment hidden (obsolete)
Comment 75 Aleisha Amohia 2018-02-13 22:00:41 UTC Comment hidden (obsolete)
Comment 76 Aleisha Amohia 2018-02-13 22:00:47 UTC Comment hidden (obsolete)
Comment 77 Aleisha Amohia 2018-02-13 22:00:52 UTC Comment hidden (obsolete)
Comment 78 Aleisha Amohia 2018-02-13 22:00:59 UTC Comment hidden (obsolete)
Comment 79 Aleisha Amohia 2018-02-13 22:01:04 UTC Comment hidden (obsolete)
Comment 80 Aleisha Amohia 2018-02-13 22:01:10 UTC Comment hidden (obsolete)
Comment 81 Aleisha Amohia 2018-02-13 22:01:16 UTC Comment hidden (obsolete)
Comment 82 Aleisha Amohia 2018-02-13 22:01:22 UTC Comment hidden (obsolete)
Comment 83 Aleisha Amohia 2018-02-13 22:01:27 UTC Comment hidden (obsolete)
Comment 84 Aleisha Amohia 2018-02-13 22:01:34 UTC Comment hidden (obsolete)
Comment 85 Aleisha Amohia 2018-02-13 22:01:40 UTC Comment hidden (obsolete)
Comment 86 Aleisha Amohia 2018-02-13 22:01:47 UTC Comment hidden (obsolete)
Comment 87 Aleisha Amohia 2018-02-13 22:01:53 UTC Comment hidden (obsolete)
Comment 88 Aleisha Amohia 2018-02-13 22:01:59 UTC Comment hidden (obsolete)
Comment 89 Aleisha Amohia 2018-02-13 22:48:02 UTC Comment hidden (obsolete)
Comment 90 paxed 2018-02-14 08:19:21 UTC
These two messages in recalls.js don't seem to be translatable:

   message = "The recall may have already been cancelled. Please refresh the page.";
   message = "Cancelled"
Comment 91 Nick Clemens 2018-02-15 16:47:17 UTC
Is this ready for testing?
Comment 92 Aleisha Amohia 2018-02-18 21:16:49 UTC
(In reply to Nick Clemens from comment #91)
> Is this ready for testing?

Not yet, still working on fixes from Comment 68. Been having some trouble with my devbox but the patch is coming!
Comment 93 Brendan Gallagher 2018-02-26 20:55:38 UTC
Any update on this one?
Comment 94 Aleisha Amohia 2018-02-26 21:11:24 UTC Comment hidden (obsolete)
Comment 95 Aleisha Amohia 2018-02-26 21:12:20 UTC
(In reply to Nick Clemens from comment #68)

...

> Can you squash some of the patches to ease readability? (e.e. the removed
> old_recalls stuff)

Will do after fixes

...

> Could overdue recalls be a tab/filter on the recalls queue?

I already have overdue recalls as a separate report page, do you mean moving this to a tab on the recalls queue page or having both the separate report and the tab on the recalls queue?

...

> 
> Question - 
>     should canceling a recall extend the due date? or notify patron somehow?
>     is calendar used to calculate new due date for recall? I think it should
> be
>     I think circ rules should include 'number of open recalls' to
> (optionally) limit how many a patron can have
>     Is it valid for two patrons to recall the second item? I would think the
> second one not be a hold? 

All very good points but with all due respect I'd love to get this base feature through, then we can start thinking about these additional things.
Comment 96 Nick Clemens 2018-03-01 16:00:15 UTC Comment hidden (obsolete)
Comment 97 Nick Clemens 2018-03-01 16:00:19 UTC Comment hidden (obsolete)
Comment 98 Nick Clemens 2018-03-01 16:00:25 UTC Comment hidden (obsolete)
Comment 99 Nick Clemens 2018-03-01 16:00:29 UTC Comment hidden (obsolete)
Comment 100 Nick Clemens 2018-03-01 16:00:33 UTC Comment hidden (obsolete)
Comment 101 Nick Clemens 2018-03-01 16:00:37 UTC Comment hidden (obsolete)
Comment 102 Nick Clemens 2018-03-01 16:00:42 UTC Comment hidden (obsolete)
Comment 103 Nick Clemens 2018-03-01 16:00:46 UTC Comment hidden (obsolete)
Comment 104 Nick Clemens 2018-03-01 16:00:50 UTC Comment hidden (obsolete)
Comment 105 Nick Clemens 2018-03-01 16:00:55 UTC Comment hidden (obsolete)
Comment 106 Nick Clemens 2018-03-01 16:00:59 UTC Comment hidden (obsolete)
Comment 107 Nick Clemens 2018-03-01 16:01:04 UTC Comment hidden (obsolete)
Comment 108 Nick Clemens 2018-03-01 16:01:08 UTC Comment hidden (obsolete)
Comment 109 Nick Clemens 2018-03-01 16:01:12 UTC Comment hidden (obsolete)
Comment 110 Nick Clemens 2018-03-01 16:01:17 UTC Comment hidden (obsolete)
Comment 111 Nick Clemens 2018-03-01 16:01:21 UTC Comment hidden (obsolete)
Comment 112 Nick Clemens 2018-03-01 16:01:25 UTC Comment hidden (obsolete)
Comment 113 Nick Clemens 2018-03-01 16:01:29 UTC Comment hidden (obsolete)
Comment 114 Nick Clemens 2018-03-01 16:01:33 UTC Comment hidden (obsolete)
Comment 115 Nick Clemens 2018-03-01 16:01:37 UTC Comment hidden (obsolete)
Comment 116 Nick Clemens 2018-03-01 16:01:42 UTC Comment hidden (obsolete)
Comment 117 Nick Clemens 2018-03-01 16:01:46 UTC Comment hidden (obsolete)
Comment 118 Nick Clemens 2018-03-01 16:01:50 UTC Comment hidden (obsolete)
Comment 119 Nick Clemens 2018-03-01 16:01:55 UTC Comment hidden (obsolete)
Comment 120 Nick Clemens 2018-03-01 16:01:59 UTC Comment hidden (obsolete)
Comment 121 Nick Clemens 2018-03-01 16:02:04 UTC Comment hidden (obsolete)
Comment 122 Nick Clemens 2018-03-01 16:02:08 UTC Comment hidden (obsolete)
Comment 123 Nick Clemens 2018-03-01 16:02:13 UTC Comment hidden (obsolete)
Comment 124 Nick Clemens 2018-03-01 16:05:13 UTC
Rebased, tested and added some follow-ups to refine the functionality here - Aleisha can you sign off on my patch?

This implements basic recall functionality and leaves room for improvements, this is a good starting point and I think can be QAed with an eye toward building refinement and extending functionality in future patchsets.
Comment 125 Aleisha Amohia 2018-03-08 02:10:51 UTC Comment hidden (obsolete)
Comment 126 Hugh Rundle 2018-03-27 23:53:34 UTC
This sounds like a great feature!

Just wondering about 'recall due date interval'. Will there be an option to not change the due date at all? i.e. we just want to recall the item to cataloguing maintenance when it's returned (and cut the queue if there are holds on the title/item), but we're not in a huge hurry.
Comment 127 Alain Dussert 2018-05-03 22:17:14 UTC
Hi All,

Has there been any updated ETA or target release date for this holds recall development?

Thanks,
Alain
Comment 128 Liz Rea 2018-05-03 22:30:12 UTC
Aleisha has been away on holiday, but this patch looks to be signed off and just waiting for QA?
Comment 129 Katrin Fischer 2018-05-04 05:22:40 UTC
We are in hard feature freeze now, so it won't make it into 18.05 (only a few days left to release), but maybe 18.11
Comment 130 Nick Clemens 2018-05-04 12:44:09 UTC
We talked about this one a lot at hackfest and have been working on recall functionality for one of our partners. While I agree on the strategy of starting small and avoiding scope creep I do think that we need a path forward and would really like to see an RFC that provides a roadmap to the final feature ensuring that this base allows for work towards that end.
Comment 131 Alain Dussert 2018-05-04 20:29:56 UTC
Hi All,

I agree that an RFC would be ideal. It would be great for this feature to be put in production in Koha 18.11

Thanks,
Alain
Comment 132 Chris Cormack 2018-05-04 20:33:33 UTC
I actually find this incredibly disappointing. We could have had a working feature in 18.05 except for people consistently trying to scope creep it. Now we won't until at least 18.11 and it will probably be over specced, over ambitious and fragile.
This has to stop.
Comment 133 Jonathan Druart 2018-05-04 20:44:14 UTC
It was too later for 18.05 anyway. We are in feature freeze for a week already.
Comment 134 Chris Cormack 2018-05-04 20:56:45 UTC
Yes, because of the months of stuff before.
Comment 135 Dobrica Pavlinusic 2018-06-02 09:06:10 UTC
(In reply to Chris Cormack from comment #132)
> I actually find this incredibly disappointing. We could have had a working
> feature in 18.05 except for people consistently trying to scope creep it.
> Now we won't until at least 18.11 and it will probably be over specced, over
> ambitious and fragile.
> This has to stop.

I have to throw in my $0.02 here: we just implemented recall notices on reservations using simple cron script:

https://github.com/dpavlin/Koha/blob/koha_ffzg/ffzg/recall_notices.pl

I would love to replace hard-coded values in it with circulation rules, but currently this bug doesn't apply, and squashing some of fixes into more manageable chunks would be great first step.

Due to our library circulation rules, OPAC parts of this patch are not interesting to us, but I would love to have intranet part in upstream Koha so that I can contribute cron script similar to ours. Does it make sense to split this bug into two halfs opac and intranet?
Comment 136 Chris Cormack 2018-06-02 09:12:55 UTC
While reserves might work for one use case, they won't for others. So instead of people turning this set of patches into the mess they've made it. There should have just been 2 different features.

We (Catalyst) are unlikely to put any more work into rebasing these for the 400th time until people figure out what they actually want. Even though we have the feature in production already
Comment 137 Alex Buckley 2018-07-10 22:21:50 UTC
Hi everyone on the CC list

Just a heads up that you will be receiving a lot of emails while I obsolete and attach newly rebased patches onto this bug report. 

I have rebased the rebase patches against master (as of 11 July 2018).

As we are already using recalls in production we have been able to identify several bugs in the recalls which had not been previously found, and I have written patches to fix these bugs which I am also attaching to this bug report: 

* Transfer recall modal always appears upon the return of a recalled item even if it is being returned to the library where it is to be picked up from. 

* When recall fields in the circulation rules are empty when a patron tries to confirm a recall on the OPAC an 'Internal Server Error' is thrown. i.e. There are no default values for the recall circ fields. 

* At present if recalls and course reserves are both enabled then if you try to view the opac-course-details.pl page for a course with a currently issued course reserve then an 'Internal Server Error' is thrown. The root cause of this is: Koha::Item->avail_for_recall does not have tests. avail_for_recall is used in the item-status.inc used by both opac-course-details.pl and opac-detail.pl and the error is caused by course reserves not handing back an avail_for_recall value as opac-detail.pl does. 

Hopefully with rebased recalls patches + new bug fix patches we can action this recalls feature along and get it into 18.11 release. 

Cheers,
Alex
Comment 138 Alex Buckley 2018-07-10 22:31:55 UTC Comment hidden (obsolete)
Comment 139 Alex Buckley 2018-07-10 22:32:51 UTC Comment hidden (obsolete)
Comment 140 Alex Buckley 2018-07-10 22:33:48 UTC Comment hidden (obsolete)
Comment 141 Alex Buckley 2018-07-10 22:35:00 UTC Comment hidden (obsolete)
Comment 142 Alex Buckley 2018-07-10 22:35:52 UTC Comment hidden (obsolete)
Comment 143 Alex Buckley 2018-07-10 22:36:43 UTC Comment hidden (obsolete)
Comment 144 Alex Buckley 2018-07-10 22:37:43 UTC Comment hidden (obsolete)
Comment 145 Alex Buckley 2018-07-10 22:38:51 UTC Comment hidden (obsolete)
Comment 146 Alex Buckley 2018-07-10 22:40:02 UTC Comment hidden (obsolete)
Comment 147 Alex Buckley 2018-07-10 22:41:10 UTC Comment hidden (obsolete)
Comment 148 Alex Buckley 2018-07-10 22:42:31 UTC Comment hidden (obsolete)
Comment 149 Alex Buckley 2018-07-10 22:43:35 UTC Comment hidden (obsolete)
Comment 150 Alex Buckley 2018-07-10 22:44:56 UTC Comment hidden (obsolete)
Comment 151 Alex Buckley 2018-07-10 22:46:44 UTC Comment hidden (obsolete)
Comment 152 Alex Buckley 2018-07-10 22:48:50 UTC Comment hidden (obsolete)
Comment 153 Alex Buckley 2018-07-10 22:49:54 UTC Comment hidden (obsolete)
Comment 154 Alex Buckley 2018-07-10 22:51:39 UTC Comment hidden (obsolete)
Comment 155 Alex Buckley 2018-07-10 23:15:20 UTC Comment hidden (obsolete)
Comment 156 Alex Buckley 2018-07-10 23:16:52 UTC Comment hidden (obsolete)
Comment 157 Alex Buckley 2018-07-10 23:18:12 UTC Comment hidden (obsolete)
Comment 158 Alex Buckley 2018-07-10 23:19:36 UTC Comment hidden (obsolete)
Comment 159 Alex Buckley 2018-07-10 23:20:46 UTC Comment hidden (obsolete)
Comment 160 Alex Buckley 2018-07-10 23:21:55 UTC Comment hidden (obsolete)
Comment 161 Alex Buckley 2018-07-10 23:22:54 UTC Comment hidden (obsolete)
Comment 162 Alex Buckley 2018-07-10 23:23:49 UTC Comment hidden (obsolete)
Comment 163 Alex Buckley 2018-07-10 23:25:07 UTC Comment hidden (obsolete)
Comment 164 Alex Buckley 2018-07-10 23:26:29 UTC Comment hidden (obsolete)
Comment 165 Alex Buckley 2018-07-10 23:32:43 UTC Comment hidden (obsolete)
Comment 166 Alex Buckley 2018-07-10 23:34:06 UTC Comment hidden (obsolete)
Comment 167 Alex Buckley 2018-07-10 23:35:57 UTC Comment hidden (obsolete)
Comment 168 Alex Buckley 2018-07-10 23:37:23 UTC Comment hidden (obsolete)
Comment 169 Alex Buckley 2018-07-10 23:42:50 UTC
All of my rebased patches + additional fixes are attached now. 

I just double checked applying all of the patches on this bug report to master as of 11 July 2018 and they all apply correctly. 

I am setting this bug report to 'Needs signoff' to try and get it moving now it can be tested more easily as it applies on master.
Comment 170 Alex Buckley 2018-07-23 04:05:38 UTC Comment hidden (obsolete)
Comment 171 Alex Buckley 2018-07-23 04:24:07 UTC Comment hidden (obsolete)
Comment 172 Alex Buckley 2018-07-23 05:46:04 UTC Comment hidden (obsolete)
Comment 173 Owen Leonard 2018-08-09 15:15:07 UTC
I'm trying to test this and running into trouble:

Other comments: The changes to sample_notices.sql don't apply cleanly, but that can wait for a rebase. Easy to ignore at this stage of testing.

I get this error in the staff client:

Missing right curly or square bracket at /home/vagrant/kohaclone/C4/Circulation.pm line 4144, at end of line

It looks like there is a missing curly bracket at line 2064, so I added that before continuing.

Then: Checked-out items in the OPAC don't show a "recall" link on the detail page. I'm logged in as a different user than the one who has it checked out. Is there more I need to do to make something "available" for recall?

Or was my correction to Circulation.pm incorrect, causing some other problems?
Comment 174 Chris Cormack 2018-09-14 17:40:56 UTC
Applying: Bug 19532: recalls history
error: sha1 information is lacking or useless (koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt).
error: could not build fake ancestor
Patch failed at 0001 Bug 19532: recalls history

I can't get past this one sorry Alex, can you try a rebase please
Comment 175 Chris Cormack 2018-09-14 22:22:44 UTC Comment hidden (obsolete)
Comment 176 Chris Cormack 2018-09-14 22:22:56 UTC Comment hidden (obsolete)
Comment 177 Chris Cormack 2018-09-14 22:23:05 UTC Comment hidden (obsolete)
Comment 178 Chris Cormack 2018-09-14 22:23:13 UTC Comment hidden (obsolete)
Comment 179 Chris Cormack 2018-09-14 22:23:20 UTC Comment hidden (obsolete)
Comment 180 Chris Cormack 2018-09-14 22:23:29 UTC Comment hidden (obsolete)
Comment 181 Chris Cormack 2018-09-14 22:23:37 UTC Comment hidden (obsolete)
Comment 182 Chris Cormack 2018-09-14 22:23:46 UTC Comment hidden (obsolete)
Comment 183 Chris Cormack 2018-09-14 22:23:55 UTC Comment hidden (obsolete)
Comment 184 Chris Cormack 2018-09-14 22:24:05 UTC Comment hidden (obsolete)
Comment 185 Chris Cormack 2018-09-14 22:24:13 UTC Comment hidden (obsolete)
Comment 186 Chris Cormack 2018-09-14 22:24:21 UTC Comment hidden (obsolete)
Comment 187 Chris Cormack 2018-09-14 22:24:29 UTC Comment hidden (obsolete)
Comment 188 Chris Cormack 2018-09-14 22:24:37 UTC Comment hidden (obsolete)
Comment 189 Chris Cormack 2018-09-14 22:24:44 UTC Comment hidden (obsolete)
Comment 190 Chris Cormack 2018-09-14 22:24:49 UTC Comment hidden (obsolete)
Comment 191 Chris Cormack 2018-09-14 22:24:55 UTC Comment hidden (obsolete)
Comment 192 Chris Cormack 2018-09-14 22:25:01 UTC Comment hidden (obsolete)
Comment 193 Chris Cormack 2018-09-14 22:25:10 UTC Comment hidden (obsolete)
Comment 194 Chris Cormack 2018-09-14 22:25:18 UTC Comment hidden (obsolete)
Comment 195 Chris Cormack 2018-09-14 22:25:25 UTC Comment hidden (obsolete)
Comment 196 Chris Cormack 2018-09-14 22:25:31 UTC Comment hidden (obsolete)
Comment 197 Chris Cormack 2018-09-14 22:25:37 UTC Comment hidden (obsolete)
Comment 198 Chris Cormack 2018-09-14 22:25:44 UTC Comment hidden (obsolete)
Comment 199 Chris Cormack 2018-09-14 22:25:52 UTC Comment hidden (obsolete)
Comment 200 Chris Cormack 2018-09-14 22:25:59 UTC Comment hidden (obsolete)
Comment 201 Chris Cormack 2018-09-14 22:26:06 UTC Comment hidden (obsolete)
Comment 202 Chris Cormack 2018-09-14 22:26:12 UTC Comment hidden (obsolete)
Comment 203 Chris Cormack 2018-09-14 22:26:19 UTC Comment hidden (obsolete)
Comment 204 Chris Cormack 2018-09-14 22:26:25 UTC Comment hidden (obsolete)
Comment 205 Chris Cormack 2018-09-14 22:26:32 UTC Comment hidden (obsolete)
Comment 206 Chris Cormack 2018-09-14 22:26:39 UTC Comment hidden (obsolete)
Comment 207 Chris Cormack 2018-09-14 22:26:46 UTC Comment hidden (obsolete)
Comment 208 Chris Cormack 2018-09-14 22:26:52 UTC Comment hidden (obsolete)
Comment 209 Owen Leonard 2018-09-26 19:43:44 UTC
Sorry, this doesn't apply anymore. I had begun testing just before master changed and was getting an error in Circulation.pm which I'm thinking may have been a merge error?

Missing right curly or square bracket at /home/vagrant/kohaclone/C4/Circulation.pm line 4147, at end of line
Comment 210 Alex Buckley 2018-10-17 22:53:37 UTC
Hi all

I have gone through and fixed the conflicts when applying these patches, and will attach the fixed patches. 

Apologies for the email deluge.

Cheers,
Alex
Comment 211 Alex Buckley 2018-10-17 23:01:35 UTC Comment hidden (obsolete)
Comment 212 Alex Buckley 2018-10-17 23:02:11 UTC Comment hidden (obsolete)
Comment 213 Alex Buckley 2018-10-17 23:02:43 UTC Comment hidden (obsolete)
Comment 214 Alex Buckley 2018-10-17 23:03:12 UTC Comment hidden (obsolete)
Comment 215 Alex Buckley 2018-10-17 23:03:50 UTC Comment hidden (obsolete)
Comment 216 Alex Buckley 2018-10-17 23:04:17 UTC Comment hidden (obsolete)
Comment 217 Alex Buckley 2018-10-17 23:04:43 UTC Comment hidden (obsolete)
Comment 218 Alex Buckley 2018-10-17 23:05:16 UTC Comment hidden (obsolete)
Comment 219 Alex Buckley 2018-10-17 23:05:44 UTC Comment hidden (obsolete)
Comment 220 Alex Buckley 2018-10-17 23:06:10 UTC Comment hidden (obsolete)
Comment 221 Alex Buckley 2018-10-17 23:06:43 UTC Comment hidden (obsolete)
Comment 222 Alex Buckley 2018-10-17 23:07:08 UTC Comment hidden (obsolete)
Comment 223 Alex Buckley 2018-10-17 23:07:37 UTC Comment hidden (obsolete)
Comment 224 Alex Buckley 2018-10-17 23:08:14 UTC Comment hidden (obsolete)
Comment 225 Alex Buckley 2018-10-17 23:08:39 UTC Comment hidden (obsolete)
Comment 226 Alex Buckley 2018-10-17 23:09:04 UTC Comment hidden (obsolete)
Comment 227 Alex Buckley 2018-10-17 23:09:27 UTC Comment hidden (obsolete)
Comment 228 Alex Buckley 2018-10-17 23:09:56 UTC Comment hidden (obsolete)
Comment 229 Alex Buckley 2018-10-17 23:10:25 UTC Comment hidden (obsolete)
Comment 230 Alex Buckley 2018-10-17 23:11:12 UTC Comment hidden (obsolete)
Comment 231 Alex Buckley 2018-10-17 23:16:21 UTC
All attached. I just tested and all commits apply cleanly on master as of 18 oct 2018.
Comment 232 Alex Buckley 2018-10-17 23:49:26 UTC
Just a note that I will be attaching a few more additional patches to this bug report in the next hour or so.
Comment 233 Alex Buckley 2018-10-18 01:45:18 UTC Comment hidden (obsolete)
Comment 234 Alex Buckley 2018-10-18 01:45:50 UTC Comment hidden (obsolete)
Comment 235 Alex Buckley 2018-10-18 01:46:21 UTC Comment hidden (obsolete)
Comment 236 Alex Buckley 2018-10-18 01:47:02 UTC Comment hidden (obsolete)
Comment 237 Alex Buckley 2018-10-18 01:47:35 UTC Comment hidden (obsolete)
Comment 238 Alex Buckley 2018-10-18 01:48:17 UTC Comment hidden (obsolete)
Comment 239 Alex Buckley 2018-10-18 01:48:55 UTC Comment hidden (obsolete)
Comment 240 Alex Buckley 2018-10-18 03:29:20 UTC Comment hidden (obsolete)
Comment 241 Alex Buckley 2018-10-18 20:31:59 UTC
Hi all

I've added the additional patches now. 

All patches apply cleanly on master as of 18th of Oct 2018.  

I am setting this to 'Needs signoff'. 

Just a note I have noticed some DB errors (e.g. when paying fees on paycollect.pl, and upon returning items). I found from using git bisect these errors were being caused by the regressions introduced by one of the patches on bug 20521: https://bugs.koha-community.org/bugzilla3/attachment.cgi?id=73683&action=diff

You may have also seen the emails regarding bug 20521 in the Koha-devel mailing list. 

I've filed another bug report for the DB error on paycollect.pl - Bug 21593 (https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=21593) - which Nick Clements has just attached a fix for. 

So in short if you experience DB errors during testing they may be due to 20521, not neccessarily recalls. 

Cheers,
Alex
Comment 242 Alex Buckley 2018-10-18 20:54:06 UTC Comment hidden (obsolete)
Comment 243 Alex Buckley 2018-10-25 22:13:38 UTC
Hi all

I have gone through and rebased again and will be attaching the rebased patches now. 

I will also be adding further enhancement patches.

Apologies for the email deluge. 

Cheers,
Alex
Comment 244 Alex Buckley 2018-10-25 22:25:17 UTC Comment hidden (obsolete)
Comment 245 Alex Buckley 2018-10-25 22:26:16 UTC Comment hidden (obsolete)
Comment 246 Alex Buckley 2018-10-25 22:27:10 UTC Comment hidden (obsolete)
Comment 247 Alex Buckley 2018-10-25 22:28:33 UTC Comment hidden (obsolete)
Comment 248 Alex Buckley 2018-10-25 22:29:15 UTC Comment hidden (obsolete)
Comment 249 Alex Buckley 2018-10-25 22:29:40 UTC Comment hidden (obsolete)
Comment 250 Alex Buckley 2018-10-25 22:30:04 UTC Comment hidden (obsolete)
Comment 251 Alex Buckley 2018-10-25 22:30:30 UTC Comment hidden (obsolete)
Comment 252 Alex Buckley 2018-10-25 22:30:59 UTC Comment hidden (obsolete)
Comment 253 Alex Buckley 2018-10-25 22:31:35 UTC Comment hidden (obsolete)
Comment 254 Alex Buckley 2018-10-25 22:31:58 UTC Comment hidden (obsolete)
Comment 255 Alex Buckley 2018-10-25 22:32:25 UTC Comment hidden (obsolete)
Comment 256 Alex Buckley 2018-10-25 22:32:49 UTC Comment hidden (obsolete)
Comment 257 Alex Buckley 2018-10-25 22:33:23 UTC Comment hidden (obsolete)
Comment 258 Alex Buckley 2018-10-25 22:33:49 UTC Comment hidden (obsolete)
Comment 259 Alex Buckley 2018-10-25 22:34:14 UTC Comment hidden (obsolete)
Comment 260 Alex Buckley 2018-10-25 22:34:40 UTC Comment hidden (obsolete)
Comment 261 Alex Buckley 2018-10-25 22:35:07 UTC Comment hidden (obsolete)
Comment 262 Alex Buckley 2018-10-25 22:35:35 UTC Comment hidden (obsolete)
Comment 263 Alex Buckley 2018-10-25 22:36:09 UTC Comment hidden (obsolete)
Comment 264 Alex Buckley 2018-10-25 22:36:32 UTC Comment hidden (obsolete)
Comment 265 Alex Buckley 2018-10-25 22:36:55 UTC Comment hidden (obsolete)
Comment 266 Alex Buckley 2018-10-25 22:37:18 UTC Comment hidden (obsolete)
Comment 267 Alex Buckley 2018-10-25 22:37:46 UTC Comment hidden (obsolete)
Comment 268 Alex Buckley 2018-10-25 22:38:12 UTC Comment hidden (obsolete)
Comment 269 Alex Buckley 2018-10-25 22:38:36 UTC Comment hidden (obsolete)
Comment 270 Alex Buckley 2018-10-25 22:39:00 UTC Comment hidden (obsolete)
Comment 271 Alex Buckley 2018-10-25 22:39:24 UTC Comment hidden (obsolete)
Comment 272 Alex Buckley 2018-10-25 22:39:55 UTC Comment hidden (obsolete)
Comment 273 Alex Buckley 2018-10-25 22:40:26 UTC Comment hidden (obsolete)
Comment 274 Alex Buckley 2018-10-25 22:40:49 UTC Comment hidden (obsolete)
Comment 275 Alex Buckley 2018-10-25 22:41:15 UTC Comment hidden (obsolete)
Comment 276 Alex Buckley 2018-10-25 22:41:40 UTC Comment hidden (obsolete)
Comment 277 Alex Buckley 2018-10-25 22:42:03 UTC Comment hidden (obsolete)
Comment 278 Alex Buckley 2018-10-25 22:42:28 UTC Comment hidden (obsolete)
Comment 279 Alex Buckley 2018-10-25 22:43:01 UTC Comment hidden (obsolete)
Comment 280 Alex Buckley 2018-10-25 22:43:45 UTC Comment hidden (obsolete)
Comment 281 Alex Buckley 2018-10-25 22:44:12 UTC Comment hidden (obsolete)
Comment 282 Alex Buckley 2018-10-25 22:44:36 UTC Comment hidden (obsolete)
Comment 283 Alex Buckley 2018-10-25 22:45:12 UTC Comment hidden (obsolete)
Comment 284 Alex Buckley 2018-10-25 22:46:07 UTC Comment hidden (obsolete)
Comment 285 Alex Buckley 2018-10-25 22:46:42 UTC Comment hidden (obsolete)
Comment 286 Alex Buckley 2018-10-25 22:47:11 UTC Comment hidden (obsolete)
Comment 287 Alex Buckley 2018-10-25 23:07:59 UTC Comment hidden (obsolete)
Comment 288 Alex Buckley 2018-10-25 23:12:25 UTC
All done, and I have attached 6 additional patches fixing a few bugs and introducing new features such as the ability to set the Recall due date interval and Recall pickup period in the unit of hours (previously these fields were only in days).
Comment 289 Martin Renvoize 2018-10-29 14:12:39 UTC
sha1 conflicts half way through applying.. then when attempting a patch -p1 I get patch ends i middle of file.
Comment 290 Alex Buckley 2018-10-29 20:54:57 UTC Comment hidden (obsolete)
Comment 291 Alex Buckley 2018-10-29 20:56:06 UTC Comment hidden (obsolete)
Comment 292 Alex Buckley 2018-10-29 20:56:31 UTC Comment hidden (obsolete)
Comment 293 Alex Buckley 2018-10-29 20:57:48 UTC Comment hidden (obsolete)
Comment 294 Alex Buckley 2018-10-29 20:58:13 UTC Comment hidden (obsolete)
Comment 295 Alex Buckley 2018-10-29 20:59:54 UTC Comment hidden (obsolete)
Comment 296 Alex Buckley 2018-10-29 21:00:29 UTC Comment hidden (obsolete)
Comment 297 Alex Buckley 2018-10-29 21:00:52 UTC Comment hidden (obsolete)
Comment 298 Alex Buckley 2018-10-29 21:01:57 UTC Comment hidden (obsolete)
Comment 299 Alex Buckley 2018-10-29 21:02:21 UTC Comment hidden (obsolete)
Comment 300 Alex Buckley 2018-10-29 21:02:56 UTC Comment hidden (obsolete)
Comment 301 Alex Buckley 2018-10-29 21:03:20 UTC Comment hidden (obsolete)
Comment 302 Alex Buckley 2018-10-29 21:03:44 UTC Comment hidden (obsolete)
Comment 303 Alex Buckley 2018-10-29 21:04:32 UTC Comment hidden (obsolete)
Comment 304 Alex Buckley 2018-10-29 21:05:09 UTC Comment hidden (obsolete)
Comment 305 Alex Buckley 2018-10-29 21:05:33 UTC Comment hidden (obsolete)
Comment 306 Alex Buckley 2018-10-29 21:07:39 UTC Comment hidden (obsolete)
Comment 307 Alex Buckley 2018-10-29 21:08:15 UTC Comment hidden (obsolete)
Comment 308 Alex Buckley 2018-10-29 21:09:12 UTC Comment hidden (obsolete)
Comment 309 Alex Buckley 2018-10-29 21:09:52 UTC Comment hidden (obsolete)
Comment 310 Alex Buckley 2018-10-29 21:12:39 UTC Comment hidden (obsolete)
Comment 311 Alex Buckley 2018-10-29 21:13:08 UTC Comment hidden (obsolete)
Comment 312 Alex Buckley 2018-10-29 21:13:39 UTC Comment hidden (obsolete)
Comment 313 Alex Buckley 2018-10-29 21:34:33 UTC Comment hidden (obsolete)
Comment 314 Alex Buckley 2018-10-29 21:35:04 UTC Comment hidden (obsolete)
Comment 315 Alex Buckley 2018-10-29 21:35:29 UTC Comment hidden (obsolete)
Comment 316 Alex Buckley 2018-10-29 21:35:52 UTC Comment hidden (obsolete)
Comment 317 Alex Buckley 2018-10-29 21:36:15 UTC Comment hidden (obsolete)
Comment 318 Alex Buckley 2018-10-29 21:36:41 UTC Comment hidden (obsolete)
Comment 319 Alex Buckley 2018-10-29 21:54:29 UTC
Rebased and re-attached to this bug report. Can you please re-test?
Comment 320 Alex Buckley 2018-10-29 22:05:04 UTC Comment hidden (obsolete)
Comment 321 Martin Renvoize 2018-10-30 10:37:47 UTC
Applies now, thanks.
Comment 322 Martin Renvoize 2018-10-30 12:27:45 UTC Comment hidden (obsolete)
Comment 323 Martin Renvoize 2018-10-30 15:57:49 UTC
I'm working on a number of QA followups.. to save the email spamming I'll upload the final set at the end of my work..
Comment 324 Martin Renvoize 2018-10-30 16:02:35 UTC
I'll be keeping a github branch updated with my work: https://github.com/colinsc/koha/compare/master...PTFS-Europe:bug_19532_recalls#diff-932a11a39c3f8c7127afb9c9a44318e7R349
Comment 325 Alex Buckley 2018-10-30 22:06:42 UTC
Thanks Martin. I have added release notes to the bug report.
Comment 326 Martin Renvoize 2018-10-31 07:20:44 UTC Comment hidden (obsolete)
Comment 327 Martin Renvoize 2018-10-31 07:20:54 UTC Comment hidden (obsolete)
Comment 328 Martin Renvoize 2018-10-31 07:21:03 UTC Comment hidden (obsolete)
Comment 329 Martin Renvoize 2018-10-31 07:21:13 UTC Comment hidden (obsolete)
Comment 330 Martin Renvoize 2018-10-31 07:21:21 UTC Comment hidden (obsolete)
Comment 331 Martin Renvoize 2018-10-31 07:21:29 UTC Comment hidden (obsolete)
Comment 332 Martin Renvoize 2018-10-31 07:21:37 UTC Comment hidden (obsolete)
Comment 333 Martin Renvoize 2018-10-31 07:21:46 UTC Comment hidden (obsolete)
Comment 334 Martin Renvoize 2018-10-31 07:21:56 UTC Comment hidden (obsolete)
Comment 335 Martin Renvoize 2018-10-31 07:22:04 UTC Comment hidden (obsolete)
Comment 336 Martin Renvoize 2018-10-31 07:22:13 UTC Comment hidden (obsolete)
Comment 337 Martin Renvoize 2018-10-31 07:22:21 UTC Comment hidden (obsolete)
Comment 338 Martin Renvoize 2018-10-31 07:22:30 UTC Comment hidden (obsolete)
Comment 339 Martin Renvoize 2018-10-31 07:22:38 UTC Comment hidden (obsolete)
Comment 340 Martin Renvoize 2018-10-31 07:22:46 UTC Comment hidden (obsolete)
Comment 341 Martin Renvoize 2018-10-31 07:22:55 UTC Comment hidden (obsolete)
Comment 342 Martin Renvoize 2018-10-31 07:23:03 UTC Comment hidden (obsolete)
Comment 343 Martin Renvoize 2018-10-31 07:23:11 UTC Comment hidden (obsolete)
Comment 344 Martin Renvoize 2018-10-31 07:23:19 UTC Comment hidden (obsolete)
Comment 345 Martin Renvoize 2018-10-31 07:23:27 UTC Comment hidden (obsolete)
Comment 346 Martin Renvoize 2018-10-31 07:23:36 UTC Comment hidden (obsolete)
Comment 347 Martin Renvoize 2018-10-31 07:23:44 UTC Comment hidden (obsolete)
Comment 348 Martin Renvoize 2018-10-31 07:23:53 UTC Comment hidden (obsolete)
Comment 349 Martin Renvoize 2018-10-31 07:24:02 UTC Comment hidden (obsolete)
Comment 350 Martin Renvoize 2018-10-31 07:24:10 UTC Comment hidden (obsolete)
Comment 351 Martin Renvoize 2018-10-31 07:24:18 UTC Comment hidden (obsolete)
Comment 352 Martin Renvoize 2018-10-31 07:24:26 UTC Comment hidden (obsolete)
Comment 353 Martin Renvoize 2018-10-31 07:24:34 UTC Comment hidden (obsolete)
Comment 354 Martin Renvoize 2018-10-31 07:24:42 UTC Comment hidden (obsolete)
Comment 355 Martin Renvoize 2018-10-31 07:24:50 UTC Comment hidden (obsolete)
Comment 356 Martin Renvoize 2018-10-31 07:24:57 UTC Comment hidden (obsolete)
Comment 357 Martin Renvoize 2018-10-31 07:25:06 UTC Comment hidden (obsolete)
Comment 358 Martin Renvoize 2018-10-31 07:42:10 UTC
I've uploaded an updated patchset with some simple followups added.

However, I've got a few code review comments, and I've not got to the full testing of the feature itself yet. I don't think this is likely to be ready for 18.11 personally, but it would be good to get the groundwork done to get it in at the beginning of the next cycle.

Review:
This really feels like it should be built atop the existing Holds/Reserves system. Everyone I've spoken to, to date, has been really surprised that it appears to be an entirely distinct feature.  It also feels like allot of code was borrowed from reserves, leading to repetition. Putting that aside for now, however:
1) Please update the POD for C4::Circulation::transferbook to state how the functionality has changed
2) There is commented out code in the above routine which looks as though it needs more thought
3) Shouldn't the librarian be able to override a recalls at checkout the same way they can override a reserve (based on sysprefs I believe)
4) Please document the recalls status codes somewhere
5) C4::Circulation::AddReturn - There are superfluous DB calls here I believe
6) Reserves/Holds take precedence over Recalls during renewal, is that deliberate (everywhere else it seems to be the opposite way around)
7) Superfluous `use Data::Dumper` in C4::Letters
8) I couldn't work out from the code how this affects fines.. only that is does
9) I don't understand why you've changed Koha/Patron.pm
10) Superfluous `use Data::Dumper` in catalogue/detail.pl
11) Why 3 distinct DB hits in catalogue/detail.pl
12) circ/recall-pickup-slip.pl appears to contain unused imports
13) circ/recalls_overdue.pl, circ/recalls_queue.pl, circ/recalls_waiting all have references to Fast Cataloguing.. not sure why
14) Why the mix of filenames with underscores and hyphens?
15) circ/returns.pl has commented out code, leaving the feeling that it needs further thought
16) atomicupdate .sql files should be converted to .perl and use the template.
17) Rebase issue has resulted in SR_SLIP being contained within many of the sql files
18) All JS should be pushed to the bottom of the file now as per recent(ish) guidelines.. I think this has partially been done, but some cases have been missed.

Lots of little things.. now I need to fully test the feature to really get to grips with why it's entirely distinct from Reserves.  I wish there was a full RFC we could see and a Work In Progress branch for updating the manual. I'm struggling to pick out the whole modus operandi of this patch as it's not what anyone here understands 'recalls' to be.

Hopefully, we can keep this moving along.. sorry it's not all good news, but I am keen to help get it moving again.
Comment 359 Holly 2020-02-14 09:26:40 UTC
I work with a few sites that are very eager to be able to recall items. I wanted to check if there was any chance of some movement on this bug or if there is anything I can do to help with it?
Comment 360 Aleisha Amohia 2020-02-16 20:13:25 UTC
Hi Holly

We have a few libraries that are using this recalls feature, plus many enhancements developed since. I will work on rebasing this throughout the year and catching master up to where our clients are at.

Aleisha
Comment 361 Aleisha Amohia 2020-04-28 22:05:22 UTC
I will be working on this patch now. The current patches will be made obselete and fresh patches will be added over the next few weeks. A heads up - there will likely be lots of emails.
Comment 362 Aleisha Amohia 2020-04-28 22:06:55 UTC Comment hidden (obsolete)
Comment 363 Aleisha Amohia 2020-04-28 22:07:08 UTC Comment hidden (obsolete)
Comment 364 Aleisha Amohia 2020-04-28 22:27:09 UTC Comment hidden (obsolete)
Comment 365 Aleisha Amohia 2020-04-29 05:54:21 UTC Comment hidden (obsolete)
Comment 366 Aleisha Amohia 2020-04-29 05:54:29 UTC Comment hidden (obsolete)
Comment 367 Aleisha Amohia 2020-04-29 05:54:38 UTC Comment hidden (obsolete)
Comment 368 Aleisha Amohia 2020-04-29 21:56:36 UTC Comment hidden (obsolete)
Comment 369 Aleisha Amohia 2020-04-29 21:56:46 UTC Comment hidden (obsolete)
Comment 370 Aleisha Amohia 2020-04-29 21:56:55 UTC Comment hidden (obsolete)
Comment 371 Aleisha Amohia 2020-04-29 21:57:04 UTC Comment hidden (obsolete)
Comment 372 Aleisha Amohia 2020-04-30 06:11:18 UTC Comment hidden (obsolete)
Comment 373 Aleisha Amohia 2020-04-30 06:11:28 UTC Comment hidden (obsolete)
Comment 374 Aleisha Amohia 2020-04-30 06:11:38 UTC Comment hidden (obsolete)
Comment 375 Aleisha Amohia 2020-05-01 05:43:48 UTC Comment hidden (obsolete)
Comment 376 Aleisha Amohia 2020-05-01 05:43:57 UTC Comment hidden (obsolete)
Comment 377 Aleisha Amohia 2020-05-01 05:44:05 UTC Comment hidden (obsolete)
Comment 378 Aleisha Amohia 2020-05-01 05:44:14 UTC Comment hidden (obsolete)
Comment 379 Aleisha Amohia 2020-05-01 05:44:22 UTC Comment hidden (obsolete)
Comment 380 Aleisha Amohia 2020-05-01 05:44:32 UTC Comment hidden (obsolete)
Comment 381 Aleisha Amohia 2020-05-04 06:16:37 UTC Comment hidden (obsolete)
Comment 382 Aleisha Amohia 2020-05-04 06:16:51 UTC Comment hidden (obsolete)
Comment 383 Aleisha Amohia 2020-05-04 06:17:03 UTC Comment hidden (obsolete)
Comment 384 Aleisha Amohia 2020-05-04 06:17:16 UTC Comment hidden (obsolete)
Comment 385 Aleisha Amohia 2020-05-04 06:17:27 UTC Comment hidden (obsolete)
Comment 386 Aleisha Amohia 2020-05-05 04:37:40 UTC Comment hidden (obsolete)
Comment 387 Aleisha Amohia 2020-05-05 04:37:49 UTC Comment hidden (obsolete)
Comment 388 Aleisha Amohia 2020-05-05 04:37:58 UTC Comment hidden (obsolete)
Comment 389 Aleisha Amohia 2020-05-05 04:38:08 UTC Comment hidden (obsolete)
Comment 390 Aleisha Amohia 2020-05-05 04:38:18 UTC Comment hidden (obsolete)
Comment 391 Aleisha Amohia 2020-05-05 04:38:27 UTC Comment hidden (obsolete)
Comment 392 Aleisha Amohia 2020-05-05 04:38:37 UTC Comment hidden (obsolete)
Comment 393 Aleisha Amohia 2020-05-05 04:38:46 UTC Comment hidden (obsolete)
Comment 394 Aleisha Amohia 2020-05-05 04:56:13 UTC Comment hidden (obsolete)
Comment 395 Aleisha Amohia 2020-05-05 04:56:23 UTC Comment hidden (obsolete)
Comment 396 Aleisha Amohia 2020-05-05 04:56:32 UTC Comment hidden (obsolete)
Comment 397 Aleisha Amohia 2020-05-05 04:56:41 UTC Comment hidden (obsolete)
Comment 398 Aleisha Amohia 2020-05-05 04:56:51 UTC Comment hidden (obsolete)
Comment 399 Aleisha Amohia 2020-05-05 05:37:23 UTC Comment hidden (obsolete)
Comment 400 Aleisha Amohia 2020-05-05 05:37:34 UTC Comment hidden (obsolete)
Comment 401 Aleisha Amohia 2020-05-06 06:45:34 UTC Comment hidden (obsolete)
Comment 402 Aleisha Amohia 2020-05-06 06:45:42 UTC Comment hidden (obsolete)
Comment 403 Aleisha Amohia 2020-05-06 06:45:50 UTC Comment hidden (obsolete)
Comment 404 Aleisha Amohia 2020-05-06 06:45:59 UTC Comment hidden (obsolete)
Comment 405 Aleisha Amohia 2020-05-06 06:46:08 UTC Comment hidden (obsolete)
Comment 406 Aleisha Amohia 2020-05-06 06:46:17 UTC Comment hidden (obsolete)
Comment 407 Aleisha Amohia 2020-05-06 06:46:26 UTC Comment hidden (obsolete)
Comment 408 Aleisha Amohia 2020-05-06 06:46:39 UTC Comment hidden (obsolete)
Comment 409 Aleisha Amohia 2020-05-07 07:14:42 UTC Comment hidden (obsolete)
Comment 410 Aleisha Amohia 2020-05-07 07:14:52 UTC Comment hidden (obsolete)
Comment 411 Aleisha Amohia 2020-05-07 07:15:01 UTC Comment hidden (obsolete)
Comment 412 Aleisha Amohia 2020-05-07 07:15:11 UTC Comment hidden (obsolete)
Comment 413 Aleisha Amohia 2020-05-07 07:15:20 UTC Comment hidden (obsolete)
Comment 414 Aleisha Amohia 2020-05-07 07:15:30 UTC Comment hidden (obsolete)
Comment 415 Aleisha Amohia 2020-05-07 07:15:44 UTC Comment hidden (obsolete)
Comment 416 Aleisha Amohia 2020-05-07 07:15:53 UTC Comment hidden (obsolete)
Comment 417 Aleisha Amohia 2020-05-08 04:01:03 UTC Comment hidden (obsolete)
Comment 418 Aleisha Amohia 2020-05-08 04:01:14 UTC Comment hidden (obsolete)
Comment 419 Aleisha Amohia 2020-05-08 04:01:23 UTC Comment hidden (obsolete)
Comment 420 Aleisha Amohia 2020-05-08 04:01:33 UTC Comment hidden (obsolete)
Comment 421 Aleisha Amohia 2020-05-08 04:01:42 UTC Comment hidden (obsolete)
Comment 422 Aleisha Amohia 2020-05-08 04:01:52 UTC Comment hidden (obsolete)
Comment 423 Aleisha Amohia 2020-05-08 04:02:01 UTC Comment hidden (obsolete)
Comment 424 Aleisha Amohia 2020-05-08 04:02:12 UTC Comment hidden (obsolete)
Comment 425 Aleisha Amohia 2020-05-11 06:28:57 UTC Comment hidden (obsolete)
Comment 426 Aleisha Amohia 2020-05-11 06:29:08 UTC Comment hidden (obsolete)
Comment 427 Aleisha Amohia 2020-05-11 06:29:17 UTC Comment hidden (obsolete)
Comment 428 Aleisha Amohia 2020-05-11 06:29:26 UTC Comment hidden (obsolete)
Comment 429 Aleisha Amohia 2020-05-11 06:29:35 UTC Comment hidden (obsolete)
Comment 430 Aleisha Amohia 2020-05-11 06:29:44 UTC Comment hidden (obsolete)
Comment 431 Aleisha Amohia 2020-05-11 06:29:54 UTC Comment hidden (obsolete)
Comment 432 Aleisha Amohia 2020-05-11 06:30:03 UTC Comment hidden (obsolete)
Comment 433 Aleisha Amohia 2020-05-12 05:51:23 UTC Comment hidden (obsolete)
Comment 434 Aleisha Amohia 2020-05-12 05:51:35 UTC Comment hidden (obsolete)
Comment 435 Aleisha Amohia 2020-05-12 05:51:44 UTC Comment hidden (obsolete)
Comment 436 Aleisha Amohia 2020-05-12 05:51:54 UTC Comment hidden (obsolete)
Comment 437 Aleisha Amohia 2020-05-12 05:52:02 UTC Comment hidden (obsolete)
Comment 438 Aleisha Amohia 2020-05-12 05:52:12 UTC Comment hidden (obsolete)
Comment 439 Aleisha Amohia 2020-05-12 05:52:23 UTC Comment hidden (obsolete)
Comment 440 Aleisha Amohia 2020-05-12 05:52:32 UTC Comment hidden (obsolete)
Comment 441 Aleisha Amohia 2020-05-13 06:26:22 UTC Comment hidden (obsolete)
Comment 442 Aleisha Amohia 2020-05-13 06:26:32 UTC Comment hidden (obsolete)
Comment 443 Aleisha Amohia 2020-05-13 06:26:41 UTC Comment hidden (obsolete)
Comment 444 Aleisha Amohia 2020-05-13 06:26:50 UTC Comment hidden (obsolete)
Comment 445 Aleisha Amohia 2020-05-13 06:26:59 UTC Comment hidden (obsolete)
Comment 446 Aleisha Amohia 2020-05-13 06:27:08 UTC Comment hidden (obsolete)
Comment 447 Aleisha Amohia 2020-05-13 06:27:18 UTC Comment hidden (obsolete)
Comment 448 Aleisha Amohia 2020-05-13 06:27:28 UTC Comment hidden (obsolete)
Comment 449 Aleisha Amohia 2020-05-13 06:35:52 UTC Comment hidden (obsolete)
Comment 450 Aleisha Amohia 2020-05-13 06:36:01 UTC Comment hidden (obsolete)
Comment 451 Aleisha Amohia 2020-05-13 06:36:11 UTC Comment hidden (obsolete)
Comment 452 Aleisha Amohia 2020-05-13 06:36:21 UTC Comment hidden (obsolete)
Comment 453 Aleisha Amohia 2020-05-13 06:36:30 UTC Comment hidden (obsolete)
Comment 454 Aleisha Amohia 2020-05-13 06:36:40 UTC Comment hidden (obsolete)
Comment 455 Aleisha Amohia 2020-05-13 06:36:50 UTC Comment hidden (obsolete)
Comment 456 Aleisha Amohia 2020-05-13 06:36:59 UTC Comment hidden (obsolete)
Comment 457 Aleisha Amohia 2020-05-14 05:18:17 UTC Comment hidden (obsolete)
Comment 458 Aleisha Amohia 2020-05-14 05:18:27 UTC Comment hidden (obsolete)
Comment 459 Aleisha Amohia 2020-05-14 05:18:36 UTC Comment hidden (obsolete)
Comment 460 Aleisha Amohia 2020-05-14 05:18:45 UTC Comment hidden (obsolete)
Comment 461 Aleisha Amohia 2020-05-14 05:18:55 UTC Comment hidden (obsolete)
Comment 462 Aleisha Amohia 2020-05-14 05:19:04 UTC Comment hidden (obsolete)
Comment 463 Aleisha Amohia 2020-05-14 05:19:14 UTC Comment hidden (obsolete)
Comment 464 Aleisha Amohia 2020-05-14 05:19:24 UTC Comment hidden (obsolete)
Comment 465 Aleisha Amohia 2020-05-14 23:20:48 UTC Comment hidden (obsolete)
Comment 466 Aleisha Amohia 2020-05-15 04:33:00 UTC Comment hidden (obsolete)
Comment 467 Aleisha Amohia 2020-05-15 04:33:11 UTC Comment hidden (obsolete)
Comment 468 Aleisha Amohia 2020-05-15 04:33:19 UTC Comment hidden (obsolete)
Comment 469 Aleisha Amohia 2020-05-15 04:33:28 UTC Comment hidden (obsolete)
Comment 470 Aleisha Amohia 2020-05-15 04:33:37 UTC Comment hidden (obsolete)
Comment 471 Aleisha Amohia 2020-05-15 04:33:46 UTC Comment hidden (obsolete)
Comment 472 Aleisha Amohia 2020-05-15 04:33:55 UTC Comment hidden (obsolete)
Comment 473 Aleisha Amohia 2020-05-15 04:34:04 UTC Comment hidden (obsolete)
Comment 474 Aleisha Amohia 2020-05-15 06:30:36 UTC Comment hidden (obsolete)
Comment 475 Aleisha Amohia 2020-05-15 06:30:45 UTC Comment hidden (obsolete)
Comment 476 Aleisha Amohia 2020-05-15 06:30:55 UTC Comment hidden (obsolete)
Comment 477 Aleisha Amohia 2020-05-15 06:31:05 UTC Comment hidden (obsolete)
Comment 478 Aleisha Amohia 2020-05-15 06:31:14 UTC Comment hidden (obsolete)
Comment 479 Aleisha Amohia 2020-05-15 06:31:24 UTC Comment hidden (obsolete)
Comment 480 Aleisha Amohia 2020-05-15 06:31:35 UTC Comment hidden (obsolete)
Comment 481 Aleisha Amohia 2020-05-15 06:31:46 UTC Comment hidden (obsolete)
Comment 482 Aleisha Amohia 2020-05-15 06:32:41 UTC
== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default. 
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A. 
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1. 
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B. 
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show that the status is revert to Requested without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here. 
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A. 
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A. 
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out. 
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown. 
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls
Comment 483 Aleisha Amohia 2020-05-18 02:41:09 UTC Comment hidden (obsolete)
Comment 484 Aleisha Amohia 2020-05-18 02:41:20 UTC Comment hidden (obsolete)
Comment 485 Aleisha Amohia 2020-05-18 02:41:29 UTC Comment hidden (obsolete)
Comment 486 Aleisha Amohia 2020-05-18 02:41:39 UTC Comment hidden (obsolete)
Comment 487 Aleisha Amohia 2020-05-18 02:41:49 UTC Comment hidden (obsolete)
Comment 488 Aleisha Amohia 2020-06-24 23:22:52 UTC Comment hidden (obsolete)
Comment 489 Aleisha Amohia 2020-06-24 23:23:10 UTC Comment hidden (obsolete)
Comment 490 Aleisha Amohia 2020-06-29 04:45:47 UTC Comment hidden (obsolete)
Comment 491 Aleisha Amohia 2020-06-29 04:46:01 UTC Comment hidden (obsolete)
Comment 492 Aleisha Amohia 2020-06-29 04:46:11 UTC Comment hidden (obsolete)
Comment 493 Aleisha Amohia 2020-06-29 04:46:21 UTC Comment hidden (obsolete)
Comment 494 Aleisha Amohia 2020-06-29 04:46:31 UTC Comment hidden (obsolete)
Comment 495 Aleisha Amohia 2020-06-29 04:46:45 UTC Comment hidden (obsolete)
Comment 496 Aleisha Amohia 2020-06-29 04:46:56 UTC Comment hidden (obsolete)
Comment 497 Aleisha Amohia 2020-06-29 04:47:07 UTC Comment hidden (obsolete)
Comment 498 Owen Leonard 2020-06-30 12:26:09 UTC
I ran into a problem at step 70, checking in a recalled item which requires a transfer and clicking "confirm recall and transfer." The dialog disappears as expected but then I'm shown another modal, the regular transfer dialog which is shown when an item is checked in at the wrong branch.
Comment 499 Aleisha Amohia 2020-07-13 05:30:49 UTC
(In reply to Owen Leonard from comment #498)
> I ran into a problem at step 70, checking in a recalled item which requires
> a transfer and clicking "confirm recall and transfer." The dialog disappears
> as expected but then I'm shown another modal, the regular transfer dialog
> which is shown when an item is checked in at the wrong branch.

Hey Owen, I am seeing this problem too but for some reason I'm really struggling with not getting that second dialog to pop up, and to hide to 'Item not checked out' alert box behind the modals. Do you have any ideas? All the code to look at is in C4/Circulation.pm in AddReturn, or in circ/returns.pl.
Comment 500 Aleisha Amohia 2020-07-13 05:33:08 UTC Comment hidden (obsolete)
Comment 501 Aleisha Amohia 2020-07-13 05:33:17 UTC Comment hidden (obsolete)
Comment 502 Aleisha Amohia 2020-07-13 05:33:26 UTC Comment hidden (obsolete)
Comment 503 Aleisha Amohia 2020-07-13 05:33:36 UTC Comment hidden (obsolete)
Comment 504 Aleisha Amohia 2020-07-13 05:33:45 UTC Comment hidden (obsolete)
Comment 505 Aleisha Amohia 2020-07-13 05:33:54 UTC Comment hidden (obsolete)
Comment 506 Aleisha Amohia 2020-07-13 05:34:04 UTC Comment hidden (obsolete)
Comment 507 Aleisha Amohia 2020-07-13 05:34:15 UTC Comment hidden (obsolete)
Comment 508 Aleisha Amohia 2020-07-14 05:46:19 UTC Comment hidden (obsolete)
Comment 509 Aleisha Amohia 2020-07-14 05:46:56 UTC
(In reply to Owen Leonard from comment #498)
> I ran into a problem at step 70, checking in a recalled item which requires
> a transfer and clicking "confirm recall and transfer." The dialog disappears
> as expected but then I'm shown another modal, the regular transfer dialog
> which is shown when an item is checked in at the wrong branch.

Believe I've fixed this, should be good to test.
Comment 510 Owen Leonard 2020-07-15 18:46:55 UTC
Okay, I've made it through the whole test plan (whew!) and ran into a couple more issues:

1. Checking in an item which has a recall, I click "confirm." Check it in again, click "confirm," and I get an error:

   Can't call method "itemnumber" on an undefined value 
   at /kohadevbox/koha/Koha/Recall.pm line 348

2. I picked a title with two items and checked each one out to different patrons. I then placed a couple of holds on bibliographic record. Then I requested a biblio-level recall on the title. When I check in one of the items and confirm the recall I get an error:

Can't call method "unblessed" on an undefined value at /kohadevbox/koha/Koha/Recall.pm line 266.

If I check it in again I get two modal dialogs: One for the recall and one for the hold.
Comment 511 Aleisha Amohia 2020-07-22 22:36:31 UTC
Created attachment 107198 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 512 Aleisha Amohia 2020-07-22 22:36:41 UTC
Created attachment 107199 [details] [review]
Bug 19532: Updated schema files
Comment 513 Aleisha Amohia 2020-07-22 22:36:50 UTC
Created attachment 107200 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 514 Aleisha Amohia 2020-07-22 22:36:59 UTC
Created attachment 107201 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 515 Aleisha Amohia 2020-07-22 22:37:08 UTC
Created attachment 107202 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 516 Aleisha Amohia 2020-07-22 22:37:19 UTC
Created attachment 107203 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 517 Aleisha Amohia 2020-07-22 22:37:28 UTC
Created attachment 107204 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 518 Aleisha Amohia 2020-07-22 22:37:38 UTC
Created attachment 107205 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 519 Aleisha Amohia 2020-07-22 22:39:54 UTC
(In reply to Owen Leonard from comment #510)
> Okay, I've made it through the whole test plan (whew!) and ran into a couple
> more issues:
> 
> 1. Checking in an item which has a recall, I click "confirm." Check it in
> again, click "confirm," and I get an error:
> 
>    Can't call method "itemnumber" on an undefined value 
>    at /kohadevbox/koha/Koha/Recall.pm line 348
> 
> 2. I picked a title with two items and checked each one out to different
> patrons. I then placed a couple of holds on bibliographic record. Then I
> requested a biblio-level recall on the title. When I check in one of the
> items and confirm the recall I get an error:
> 
> Can't call method "unblessed" on an undefined value at
> /kohadevbox/koha/Koha/Recall.pm line 266.
> 
> If I check it in again I get two modal dialogs: One for the recall and one
> for the hold.

Thank you for testing Owen, I've now fixed these problems. Ready to test.
Comment 520 Aleisha Amohia 2020-08-04 23:03:41 UTC
Created attachment 107807 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 521 Aleisha Amohia 2020-08-04 23:03:50 UTC
Created attachment 107808 [details] [review]
Bug 19532: Updated schema files
Comment 522 Aleisha Amohia 2020-08-04 23:04:02 UTC
Created attachment 107809 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 523 Aleisha Amohia 2020-08-04 23:04:12 UTC
Created attachment 107810 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 524 Aleisha Amohia 2020-08-04 23:04:22 UTC
Created attachment 107811 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 525 Aleisha Amohia 2020-08-04 23:04:32 UTC
Created attachment 107812 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 526 Aleisha Amohia 2020-08-04 23:04:41 UTC
Created attachment 107813 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 527 Aleisha Amohia 2020-08-04 23:04:51 UTC
Created attachment 107814 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 528 Marcel de Rooy 2020-08-05 11:27:55 UTC
Some work should be done according to QA tools:

C4/Circulation.pm FAIL critic # Variables::ProhibitConditionalDeclarations: Got 2 violation(s).
C4/Overdues.pm FAIL critic # Variables::ProhibitConditionalDeclarations: Got 1 violation(s).
koha-tmpl/intranet-tmpl/prog/en/modules/recalls/recalls_waiting.ttforbidden pattern: Attribute type should not be used for script tags (bug 20053) (line 158)
koha-tmpl/intranet-tmpl/prog/js/recalls.js
Untranslatable string found (Are you sure you want to remove this recall?) - See coding guideline JS5
        Untranslatable string found (The recall may have already been cancelled. Please refresh the page.) - See coding guideline JS5
        Untranslatable string found (Cancelled) - See coding guideline JS5
        Untranslatable string found (Are you sure you want to expire this recall?) - See coding guideline JS5
        Untranslatable string found (The recall may have already been expired. Please refresh the page.) - See coding guideline JS5
        Untranslatable string found (Expired) - See coding guideline JS5
        Untranslatable string found (Are you sure you want to revert the waiting status of this recall?) - See coding guideline JS5
        Untranslatable string found (The recall waiting status may have already been reverted. Please refresh the page.) - See coding guideline JS5
        Untranslatable string found (Status updated) - See coding guideline JS5
        Untranslatable string found (Are you sure you want to mark this recall as overdue?) - See coding guideline JS5
        Untranslatable string found (The recall may have already been marked as overdue. Please refresh the page.) - See coding guideline JS5
        Untranslatable string found (Marked overdue) - See coding guideline JS5
        Untranslatable string found (Are you sure you want to remove this recall and return the item to it's home library?) - See coding guideline JS5
        Untranslatable string found (The recall may have already been removed. Please refresh the page.) - See coding guideline JS5
        Untranslatable string found (Cancelled) - See coding guideline JS5
        Untranslatable string found (Are you sure you want to remove the selected recall(s)?) - See coding guideline JS5
        Untranslatable string found (Please make a selection.) - See coding guideline JS5

misc/cronjobs/recalls/expire_recalls.pl
Code before strictures are enabled at line 20, column 1. See page 429 of PBP.
misc/cronjobs/recalls/overdue_recalls.pl
Code before strictures are enabled at line 20, column 1. See page 429 of PBP.
svc/checkouts
# Variables::ProhibitConditionalDeclarations: Got 1 violation(s).
Comment 529 Aleisha Amohia 2020-08-06 23:26:44 UTC
Created attachment 107918 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 530 Aleisha Amohia 2020-08-06 23:26:56 UTC
Created attachment 107919 [details] [review]
Bug 19532: Updated schema files
Comment 531 Aleisha Amohia 2020-08-06 23:27:06 UTC
Created attachment 107920 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 532 Aleisha Amohia 2020-08-06 23:27:16 UTC
Created attachment 107921 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 533 Aleisha Amohia 2020-08-06 23:27:25 UTC
Created attachment 107922 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 534 Aleisha Amohia 2020-08-06 23:27:35 UTC
Created attachment 107923 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 535 Aleisha Amohia 2020-08-06 23:27:45 UTC
Created attachment 107924 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 536 Aleisha Amohia 2020-08-06 23:27:55 UTC
Created attachment 107925 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 537 Aleisha Amohia 2020-08-07 00:50:57 UTC
(In reply to Marcel de Rooy from comment #528)
> Some work should be done according to QA tools:

Believe these are all fixed. Ready to test.
Comment 538 Aleisha Amohia 2020-08-14 04:55:57 UTC
Created attachment 108222 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 539 Aleisha Amohia 2020-08-14 04:56:12 UTC
Created attachment 108223 [details] [review]
Bug 19532: Updated schema files
Comment 540 Aleisha Amohia 2020-08-14 04:56:27 UTC
Created attachment 108224 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 541 Aleisha Amohia 2020-08-14 04:56:39 UTC
Created attachment 108225 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 542 Aleisha Amohia 2020-08-14 04:56:53 UTC
Created attachment 108226 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 543 Aleisha Amohia 2020-08-14 04:57:07 UTC
Created attachment 108227 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 544 Aleisha Amohia 2020-08-14 04:57:22 UTC
Created attachment 108228 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 545 Aleisha Amohia 2020-08-14 04:57:36 UTC
Created attachment 108229 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 546 Marcel de Rooy 2020-08-24 11:48:44 UTC
Created attachment 108980 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 547 Marcel de Rooy 2020-08-24 11:48:55 UTC
Created attachment 108981 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 548 Marcel de Rooy 2020-08-24 11:49:06 UTC
Created attachment 108982 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 549 Marcel de Rooy 2020-08-24 11:49:50 UTC
Rebased "Other objects used in recalls feature"
Comment 550 Marcel de Rooy 2020-08-24 11:54:07 UTC
t/db_dependent/Koha/Recall.t .. Variable "@items" is not imported at /usr/share/koha/Koha/Biblio.pm line 856.
        (Did you mean &items instead?)
Global symbol "@items" requires explicit package name (did you forget to declare "my @items"?) at /usr/share/koha/Koha/Biblio.pm line 856.
Comment 551 Marcel de Rooy 2020-08-24 11:56:03 UTC
Same for t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t

Well etc.
Comment 552 Aleisha Amohia 2020-08-31 05:11:26 UTC
Created attachment 109306 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 553 Aleisha Amohia 2020-08-31 05:11:37 UTC
Created attachment 109307 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 554 Aleisha Amohia 2020-08-31 05:11:48 UTC
Created attachment 109308 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 555 Aleisha Amohia 2020-08-31 05:11:59 UTC
Created attachment 109309 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 556 Aleisha Amohia 2020-08-31 05:12:12 UTC
Created attachment 109310 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 557 Aleisha Amohia 2020-08-31 05:15:47 UTC
Created attachment 109311 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 558 Aleisha Amohia 2020-08-31 05:15:59 UTC
Created attachment 109312 [details] [review]
Bug 19532: Updated schema files
Comment 559 Aleisha Amohia 2020-08-31 05:16:09 UTC
Created attachment 109313 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 560 Aleisha Amohia 2020-08-31 05:16:19 UTC
Created attachment 109314 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 561 Aleisha Amohia 2020-08-31 05:16:28 UTC
Created attachment 109315 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 562 Aleisha Amohia 2020-08-31 05:16:42 UTC
Created attachment 109316 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 563 Aleisha Amohia 2020-08-31 05:16:56 UTC
Created attachment 109317 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 564 Aleisha Amohia 2020-08-31 05:17:09 UTC
Created attachment 109318 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 565 Owen Leonard 2020-08-31 17:35:32 UTC
This did not apply for me. :(
Comment 566 Aleisha Amohia 2020-09-01 21:58:03 UTC
Created attachment 109463 [details] [review]
Bug 19532: Updated schema files
Comment 567 Aleisha Amohia 2020-09-01 21:58:12 UTC
Created attachment 109464 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 568 Aleisha Amohia 2020-09-01 21:58:23 UTC
Created attachment 109465 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 569 Aleisha Amohia 2020-09-01 21:58:33 UTC
Created attachment 109466 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 570 Aleisha Amohia 2020-09-01 21:58:44 UTC
Created attachment 109467 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 571 Aleisha Amohia 2020-09-01 21:58:56 UTC
Created attachment 109468 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 572 Aleisha Amohia 2020-09-01 21:59:08 UTC
Created attachment 109469 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 573 Owen Leonard 2020-09-04 18:02:26 UTC
I get an error when I click "Print slip and confirm" on a checked-in recall. The URL in the location bar is:

/cgi-bin/koha/recalls/recall_pickup_slip.pl?recall_id=

The error is:

Can't call method "itemnumber" on an undefined value at /kohadevbox/koha/recalls/recall_pickup_slip.pl line 42

When I check out the recalled item to the patron who requested it the recall is not cleared. It still shows up under the "Recalls" tab on the patrons account, saying "Ready for pickup."

When I run "perl misc/cronjobs/recalls/expire_recalls.pl" it doesn't seem to do anything :(
Comment 574 Aleisha Amohia 2020-09-09 00:43:25 UTC
Created attachment 109775 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 575 Aleisha Amohia 2020-09-09 00:43:37 UTC
Created attachment 109776 [details] [review]
Bug 19532: Updated schema files
Comment 576 Aleisha Amohia 2020-09-09 00:43:50 UTC
Created attachment 109777 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 577 Aleisha Amohia 2020-09-09 00:44:04 UTC
Created attachment 109778 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 578 Aleisha Amohia 2020-09-09 00:44:17 UTC
Created attachment 109779 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 579 Aleisha Amohia 2020-09-09 00:44:33 UTC
Created attachment 109780 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 580 Aleisha Amohia 2020-09-09 00:44:48 UTC
Created attachment 109781 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 581 Aleisha Amohia 2020-09-09 00:45:02 UTC
Created attachment 109782 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 582 Aleisha Amohia 2020-09-09 03:18:00 UTC
Created attachment 109783 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 583 Aleisha Amohia 2020-09-09 03:18:11 UTC
Created attachment 109784 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 584 Aleisha Amohia 2020-09-09 03:18:23 UTC
Created attachment 109785 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 585 Aleisha Amohia 2020-09-09 03:20:21 UTC
(In reply to Owen Leonard from comment #573)
> I get an error when I click "Print slip and confirm" on a checked-in recall.
> The URL in the location bar is:
> 
> /cgi-bin/koha/recalls/recall_pickup_slip.pl?recall_id=
> 
> The error is:
> 
> Can't call method "itemnumber" on an undefined value at
> /kohadevbox/koha/recalls/recall_pickup_slip.pl line 42
> 
> When I check out the recalled item to the patron who requested it the recall
> is not cleared. It still shows up under the "Recalls" tab on the patrons
> account, saying "Ready for pickup."
> 
> When I run "perl misc/cronjobs/recalls/expire_recalls.pl" it doesn't seem to
> do anything :(

Hi Owen, thanks for testing. I have fixed the first two errors, however the expire_recalls.pl cronjob seems to work as expected for me. Perhaps check that the expiration date is set to before today (you'll need to adjust in the db manually) and try running? I believe this is good to test.
Comment 586 Henry Bolshaw 2020-10-03 21:43:49 UTC
Hi Aleisha, this is a really exciting feature that I'm looking forward to testing!

I think there must have been some changes to the schema recently because I'm getting a merge conflict when I try and apply the Updated schema files patch.

Applying: Bug 19532: Updated schema files
Using index info to reconstruct a base tree...
M	Koha/Schema/Result/Branch.pm
M	Koha/Schema/Result/Item.pm
Falling back to patching base and 3-way merge...
Auto-merging Koha/Schema/Result/Item.pm
CONFLICT (content): Merge conflict in Koha/Schema/Result/Item.pm
Auto-merging Koha/Schema/Result/Branch.pm
CONFLICT (content): Merge conflict in Koha/Schema/Result/Branch.pm
error: Failed to merge in the changes.
Patch failed at 0001 Bug 19532: Updated schema files
Comment 587 Aleisha Amohia 2020-10-05 00:27:10 UTC
Created attachment 111199 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 588 Aleisha Amohia 2020-10-05 00:27:28 UTC
Created attachment 111200 [details] [review]
Bug 19532: Updated schema files
Comment 589 Aleisha Amohia 2020-10-05 00:28:11 UTC
Created attachment 111201 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 590 Aleisha Amohia 2020-10-05 00:28:26 UTC
Created attachment 111202 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 591 Aleisha Amohia 2020-10-05 00:28:40 UTC
Created attachment 111203 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 592 Aleisha Amohia 2020-10-05 00:28:51 UTC
Created attachment 111204 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 593 Aleisha Amohia 2020-10-05 00:29:09 UTC
Created attachment 111205 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 594 Aleisha Amohia 2020-10-05 00:29:26 UTC
Created attachment 111206 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 595 Henry Bolshaw 2020-10-06 23:27:41 UTC
After applying the patches, I'm getting an error trace page when viewing some patron pages: "The method Koha::Patron->recalls is not covered by tests!" 

This happens when I navigate to a patron on cgi-bin/koha/members/moremember.pl and cgi-bin/koha/circ/circulation.pl

I thought this was possibly something I'd set up incorrectly in Koha Testing docker but I'm getting the same error with the sandboxes.

On KTD the value for Confirm RecallsMaxPickUpDelay was empty rather than 7 but on the sandboxes it was set to 7 by default as expected.

When I ran the tests on KTD I also got some errors:

FAIL	Koha/Schema/Result/Recall.pm
   FAIL	  pod coverage
		POD coverage was greater before, try perl -MPod::Coverage=PackageName -e666

FAIL	koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc
   FAIL	  forbidden patterns
		forbidden pattern: Font Awesome icons need the aria-hidden attribute for accessibility purpose (see bug 25166)  (line 15)

There were also several instances of this error:
   FAIL	  forbidden patterns
		forbidden pattern: Script permissions is authnotrequired => 0, it could be correct for an OPAC script if it is was you really want error (bug 24663) (line 30)
Comment 596 Aleisha Amohia 2020-10-23 23:03:12 UTC
Created attachment 112316 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 597 Aleisha Amohia 2020-10-23 23:03:39 UTC
Created attachment 112317 [details] [review]
Bug 19532: Updated schema files
Comment 598 Aleisha Amohia 2020-10-23 23:23:36 UTC
Created attachment 112321 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 599 Aleisha Amohia 2020-10-23 23:24:00 UTC
Created attachment 112322 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 600 Aleisha Amohia 2020-10-23 23:24:27 UTC
Created attachment 112323 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 601 Aleisha Amohia 2020-10-23 23:24:52 UTC
Created attachment 112324 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 602 Aleisha Amohia 2020-10-23 23:25:17 UTC
Created attachment 112325 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 603 Aleisha Amohia 2020-10-23 23:25:41 UTC
Created attachment 112326 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 604 Aleisha Amohia 2020-10-24 00:44:32 UTC
Created attachment 112346 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files
Comment 605 Aleisha Amohia 2020-10-25 04:36:15 UTC
Created attachment 112472 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test
Comment 606 David Nind 2020-10-26 01:46:36 UTC
Created attachment 112491 [details]
Screenshots - Your account screens display issues for recalls (2020-10-26)

Hi Aleisha.

I've got to the end of step 65 so far, and here are the two items I've noticed:

1. In the OPAC under your account, the your recalls history pages don't display correctly. The menu options under your account take up the whole width of the screen, and the your recalls history lists, forms and messages appear at the bottom of the page. I've attached screenshots so you can see what Imean.

2. When setting up an item for a course reserve (steps 33-36) an error occurs when listing items for a course reserve in the staff interface. I've created bug 26819 for this as it occurs on master before the recalls patches are applied, but does not occur on 20.05.x. An item is actually added to the course reserve, and you can view it in the OPAC to successfully complete these steps.

The good news is that all the tests now pass (apart from the one false positive when running the qa scripts).

David
Comment 607 David Nind 2020-10-26 20:24:20 UTC
Created attachment 112540 [details]
Error trace - step 84 - circulation - recalls to pull

Hi Aleisha.

I'm now up to step 136, and here are two additional things noted:

- Step 84: Circulation > Recalls to pull - get error trace when I try to access the page (file with error trace attached)

- Step 118: had to use UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X; (using MariaDb, so not sure if this makes a difference).

- I can't seem to get Circulation to work as expected (steps 137-149). I will have another go.
  . Step 143: the item is not renewable, but I can't see a "Recalled link".
  . Step 145: recall is not cancelled, and remains checked out.

David
Comment 608 Aleisha Amohia 2020-10-28 03:18:06 UTC
Created attachment 112612 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 609 Aleisha Amohia 2020-10-28 03:18:22 UTC
Created attachment 112613 [details] [review]
Bug 19532: Updated schema files
Comment 610 Aleisha Amohia 2020-10-28 03:18:36 UTC
Created attachment 112614 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 611 Aleisha Amohia 2020-10-28 03:18:51 UTC
Created attachment 112615 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 612 Aleisha Amohia 2020-10-28 03:19:05 UTC
Created attachment 112616 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 613 Aleisha Amohia 2020-10-28 03:19:21 UTC
Created attachment 112617 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 614 Aleisha Amohia 2020-10-28 03:19:36 UTC
Created attachment 112618 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 615 Aleisha Amohia 2020-10-28 03:19:49 UTC
Created attachment 112619 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

Test plan in Comment 482.
Comment 616 Aleisha Amohia 2020-10-28 03:20:02 UTC
Created attachment 112620 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files
Comment 617 Aleisha Amohia 2020-10-28 03:20:16 UTC
Created attachment 112621 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test
Comment 618 Aleisha Amohia 2020-10-28 03:20:28 UTC
Created attachment 112622 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item
Comment 619 Aleisha Amohia 2020-10-28 03:22:56 UTC
Thanks so much for your detailed comments David!

(In reply to David Nind from comment #606)
> 1. In the OPAC under your account, the your recalls history pages don't
> display correctly. The menu options under your account take up the whole
> width of the screen, and the your recalls history lists, forms and messages
> appear at the bottom of the page. I've attached screenshots so you can see
> what Imean.

fixed
> 
> 2. When setting up an item for a course reserve (steps 33-36) an error
> occurs when listing items for a course reserve in the staff interface. I've
> created bug 26819 for this as it occurs on master before the recalls patches
> are applied, but does not occur on 20.05.x. An item is actually added to the
> course reserve, and you can view it in the OPAC to successfully complete
> these steps.

I couldn't reproduce this problem but even so, I guess this is not a problem with Bug 19532 and there's nothing for me to do here.

> - Step 84: Circulation > Recalls to pull - get error trace when I try to
> access the page (file with error trace attached)

fixed 

> 
> - Step 118: had to use UPDATE recalls SET waitingdate = NOW() - interval 5
> day WHERE recall_id = X; (using MariaDb, so not sure if this makes a
> difference).

yes good catch, the query I provided in the test plan doesn't work. please use this one instead!

> 
> - I can't seem to get Circulation to work as expected (steps 137-149). I
> will have another go.
>   . Step 143: the item is not renewable, but I can't see a "Recalled link".
>   . Step 145: recall is not cancelled, and remains checked out.

both fixed
Comment 620 David Nind 2020-10-29 19:15:14 UTC
Thanks Aleisha!

I haven't gone through the whole test plan again, but this seems to have resolved things.

However, when retesting BIBLIO-LEVEL RECALL, TRANSFER REQUIRED (steps 66-89) I can't seem to get the basic recall working properly - after checking out to Borrower A it is still showing as ready for pickup on the recall tab:

1. Check out Item A to Borrower B.
2. Log in to the OPAC as Borrower A.
3. Find Biblio A and place a biblio-level recall.
4. Item A checked in and recall confirmed - shows as ready for pickup.
5. After checking out Item A to Borrower A to fullfill the recall it is showing as:
   - OPAC for biblio: Checked out + On hold for Item A
   - your summary - checked out tab: message showing "The item has been recalled. Please return by the new due date."
   - your summary - recalls tab: showing as Ready for pickup
   - staff interface > patron account for Borrower A: item checked out to Borrower A under checkouts tab, recall showing as ready for pickup under recalls tab
   - still shows as ready for pickup under recalls queue and recalls awaiting pickup

David
Comment 621 Victor Grousset/tuxayo 2020-11-02 13:48:52 UTC
> 2. Run database updates, update schema files and confirm everything applies cleanly

"update schema files" => the dbic command right?
No diff after running, is that expected?


Since last master pushes, patches don't applies anymore.
Comment 622 David Nind 2020-11-03 10:13:20 UTC
That's right - run the dbic command (if using koha-testing-docker). There were changes.
Comment 623 Aleisha Amohia 2020-11-05 21:44:07 UTC
Created attachment 113195 [details] [review]
Bug 19532: Updated schema files
Comment 624 Aleisha Amohia 2020-11-05 21:44:17 UTC
Created attachment 113196 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 625 Aleisha Amohia 2020-11-05 21:44:28 UTC
Created attachment 113197 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 626 Aleisha Amohia 2020-11-05 21:44:39 UTC
Created attachment 113198 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 627 Aleisha Amohia 2020-11-05 21:44:51 UTC
Created attachment 113199 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 628 Aleisha Amohia 2020-11-05 21:45:03 UTC
Created attachment 113200 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 629 Aleisha Amohia 2020-11-05 21:45:15 UTC
Created attachment 113201 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show that the status is revert to Requested without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls
Comment 630 Aleisha Amohia 2020-11-05 21:45:26 UTC
Created attachment 113202 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files
Comment 631 Aleisha Amohia 2020-11-05 21:45:37 UTC
Created attachment 113203 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test
Comment 632 Aleisha Amohia 2020-11-05 21:45:49 UTC
Created attachment 113204 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item
Comment 633 Aleisha Amohia 2020-11-05 21:46:00 UTC
Created attachment 113205 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall
Comment 634 Aleisha Amohia 2020-11-05 21:47:37 UTC
Thanks David and Victor, I have rebased and fixed the bug that David mentioned, ready again for testing
Comment 635 David Nind 2020-11-06 04:19:11 UTC
Hi Aleisha.

I went through the test plan again, ran the tests, and ran the qa scripts.

1. Test plan: there is only one minor item that isn't working as expected - I noted previously, but didn't report it. I think it is pretty minor, so could wait.

  Step 58. Need to refresh the page to see the change in status (from ready for pickup TO Requested).

2. Tests: one test fails for prove -v t/db_dependent/Koha/Recalls.t

not ok 19 - Recall fulfilled with move_recall

#   Failed test 'Recall fulfilled with move_recall'
#   at t/db_dependent/Koha/Recalls.t line 173.
# Looks like you failed 1 test of 19.
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/19 subtests 

Test Summary Report
-------------------
t/db_dependent/Koha/Recalls.t (Wstat: 256 Tests: 19 Failed: 1)
  Failed test:  19
  Non-zero exit status: 1
Files=1, Tests=19,  3 wallclock secs ( 0.02 usr  0.01 sys +  2.75 cusr  0.26 csys =  3.04 CPU)
Result: FAIL

3. QA scripts: I ran the qa scripts (not something I normally do)

I've put the output from the test fail and qa output here:
http://paste.koha-community.org/26033

David
Comment 636 Aleisha Amohia 2020-11-08 21:28:03 UTC
Created attachment 113286 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason
Comment 637 Aleisha Amohia 2020-11-08 21:28:14 UTC
Created attachment 113287 [details] [review]
Bug 19532: Updated schema files
Comment 638 Aleisha Amohia 2020-11-08 21:28:25 UTC
Created attachment 113288 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Comment 639 Aleisha Amohia 2020-11-08 21:28:36 UTC
Created attachment 113289 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests
Comment 640 Aleisha Amohia 2020-11-08 21:28:47 UTC
Created attachment 113290 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t
Comment 641 Aleisha Amohia 2020-11-08 21:28:58 UTC
Created attachment 113291 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t
Comment 642 Aleisha Amohia 2020-11-08 21:29:09 UTC
Created attachment 113292 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled
Comment 643 Aleisha Amohia 2020-11-08 21:29:20 UTC
Created attachment 113293 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls
Comment 644 Aleisha Amohia 2020-11-08 21:29:33 UTC
Created attachment 113294 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files
Comment 645 Aleisha Amohia 2020-11-08 21:29:45 UTC
Created attachment 113295 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test
Comment 646 Aleisha Amohia 2020-11-08 21:29:56 UTC
Created attachment 113296 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item
Comment 647 Aleisha Amohia 2020-11-08 21:30:13 UTC
Created attachment 113297 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall
Comment 648 Aleisha Amohia 2020-11-08 21:30:24 UTC
Created attachment 113298 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer
Comment 649 Jonathan Druart 2020-11-09 09:41:07 UTC
I am sorry Aleisha, this one missed the line for 20.11.
Comment 650 David Nind 2020-11-09 19:32:22 UTC
Hi Aleisha.

I was too slow 8-(... Hopefully 21.05!

All the tests now pass!

However, when I go to Administration > Patrons and circulation > Circulation and fines rules (after applying the patches, database update, dbic, and restart_all) I now get a trace error, which starts with:

Could not compile /kohadevbox/koha/admin/smart-rules.pl: syntax error at /kohadevbox/koha/admin/smart-rules.pl line 343, near ">>"
Global symbol "$bor" requires explicit package name (did you forget to declare "my $bor"?) at /kohadevbox/koha/admin/smart-rules.pl line 348.
Global symbol "$bor" requires explicit package name (did you forget to declare "my $bor"?) at /kohadevbox/koha/admin/smart-rules.pl line 348.
Global symbol "$itemtype" requires explicit package name (did you forget to declare "my $itemtype"?) at /kohadevbox/koha/admin/smart-rules.pl line 349.
Global symbol "$itemtype" requires explicit package name (did you forget to declare "my $itemtype"?) at /kohadevbox/koha/admin/smart-rules.pl line 349.
Global symbol "$br" requires explicit package name (did you forget to declare "my $br"?) at /kohadevbox/koha/admin/smart-rules.pl line 350.
Global symbol "$br" requires explicit package name (did you forget to declare "my $br"?) at /kohadevbox/koha/admin/smart-rules.pl line 350.
Global symbol "$rules" requires explicit package name (did you forget to declare "my $rules"?) at /kohadevbox/koha/admin/smart-rules.pl line 351.
syntax error at /kohadevbox/koha/admin/smart-rules.pl line 356, near "elsif"
Can't redeclare "my" in "my" at /kohadevbox/koha/admin/smart-rules.pl line 358, near ""
/kohadevbox/koha/admin/smart-rules.pl has too many errors.
 at /usr/share/perl5/CGI/Compile.pm line 132

    in CGI::Compile::compile at /usr/share/perl5/CGI/Compile.pm line 132

      129:         my $code = $self->_eval($eval);
      130:         my $exception = $@;
      131: 
      132:         die "Could not compile $script: $exception" if $exception;
      133: 
      134:         sub {
      135:             my @args = @_;

There is also a QA fail:

...
OK	Makefile.PL
 FAIL	admin/smart-rules.pl
   FAIL	  valid
		Number found where operator expected 
			(Do you need to predeclare Bug?)
		"my" variable $input masks earlier declaration in same scope 
		syntax error 
		Global symbol "$bor" requires explicit package name (did you forget to declare "my $bor"?) 
		Global symbol "$bor" requires explicit package name (did you forget to declare "my $bor"?) 
		Global symbol "$itemtype" requires explicit package name (did you forget to declare "my $itemtype"?) 
		Global symbol "$itemtype" requires explicit package name (did you forget to declare "my $itemtype"?) 
		Global symbol "$br" requires explicit package name (did you forget to declare "my $br"?) 
		Global symbol "$br" requires explicit package name (did you forget to declare "my $br"?) 
		Global symbol "$rules" requires explicit package name (did you forget to declare "my $rules"?) 
		syntax error 
		Can't redeclare "my" in "my" 
		admin/smart-rules.pl has too many errors.

 OK	catalogue/detail.pl
...

David
Comment 651 Aleisha Amohia 2020-11-09 20:37:02 UTC
Created attachment 113335 [details] [review]
Bug 19532: (follow-up) Remove bad merge conflict markers
Comment 652 David Nind 2020-11-10 11:37:06 UTC
Created attachment 113351 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 653 David Nind 2020-11-10 11:37:16 UTC
Created attachment 113352 [details] [review]
Bug 19532: Updated schema files

Signed-off-by: David Nind <david@davidnind.com>
Comment 654 David Nind 2020-11-10 11:37:26 UTC
Created attachment 113353 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 655 David Nind 2020-11-10 11:37:36 UTC
Created attachment 113354 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>
Comment 656 David Nind 2020-11-10 11:37:46 UTC
Created attachment 113355 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 657 David Nind 2020-11-10 11:37:57 UTC
Created attachment 113356 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 658 David Nind 2020-11-10 11:38:08 UTC
Created attachment 113357 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>
Comment 659 David Nind 2020-11-10 11:38:19 UTC
Created attachment 113358 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>
Comment 660 David Nind 2020-11-10 11:38:30 UTC
Created attachment 113359 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>
Comment 661 David Nind 2020-11-10 11:38:41 UTC
Created attachment 113361 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>
Comment 662 David Nind 2020-11-10 11:38:52 UTC
Created attachment 113362 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>
Comment 663 David Nind 2020-11-10 11:39:03 UTC
Created attachment 113363 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 664 David Nind 2020-11-10 11:39:14 UTC
Created attachment 113364 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>
Comment 665 David Nind 2020-11-10 11:39:25 UTC
Created attachment 113365 [details] [review]
Bug 19532: (follow-up) Remove bad merge conflict markers

Signed-off-by: David Nind <david@davidnind.com>
Comment 666 David Nind 2020-11-10 11:44:43 UTC
My notes from testing.

Tests and qa script
~~~~~~~~~~~~~~~~~~~

All tests pass!

prove t/db_dependent/Koha/Recall.t
prove t/db_dependent/Koha/Recalls.t
prove t/db_dependent/Stats.t
prove t/db_dependent/Koha/Item.t
prove t/db_dependent/Koha/Biblio.t
prove t/db_dependent/Koha/Patron.t
prove t/db_dependent/XSLT.t
prove t/db_dependent/Search.t
prove t/db_dependent/Holds.t
prove t/db_dependent/Circulation/transferbook.t
prove t/db_dependent/Circulation.t
prove t/db_dependent/Circulation/CalcFine.t

The only QA script error (qa -v 2) is a false positive accoriding to kidclamp:
http://irc.koha-community.org/koha/2020-10-24#i_2300062

 FAIL	Koha/Schema/Result/Recall.pm
   FAIL	  pod coverage
		POD coverage was greater before, try perl -MPod::Coverage=PackageName -e666

Accounts and records used
~~~~~~~~~~~~~~~~~~~~~~~~~

Borrower A (created as new): My Name, 12345, myname, Policy10

Borrower B (login and password changed for Henry): henry, Policy10

Biblio A:
- Record with two items
- Effective perl programming (139, items 296 (Item A) and 297 (Item C))
- Barcodes: Item A 39999000005776 and Item B 39999000005790

Biblio B:
- Record with at least one item
- Lady Susan ; The Watsons ; Sanditon (283, item 627 (Item C))
- Barcode: Item C 39999000012392

Branch A: Centerville
Branch B: Midway

Clarification/notes for specific steps of the test plan
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

See Comment #659 for the full test plan.

33-36. Note that when placing a course reserve you get an error when listing items for a course in the staff interface - bug 26819 was created, this problem existed on master before the recalls patches were applied but does not occur on 20.05.x.

45. Clarification: need to check Item C out to a patron before placing the recall.

111: UPDATE recalls SET expirationdate = NOW() - interval 2 day WHERE recall_id = X;

127: UPDATE recalls SET waitingdate = NOW() - interval 2 day WHERE recall_id = X;

133: UPDATE issues SET date_due = NOW() - interval 2 day WHERE issue_id = X;

134: Script path should be recalls (not recall): perl misc/cronjobs/recalls/overdue_recalls.pl

150: UPDATE issues SET date_due = NOW() - interval 2 day WHERE issue_id = X;
Comment 667 Aleisha Amohia 2020-11-10 20:16:26 UTC
Thank you so much for such thorough testing, David!
Comment 668 Victor Grousset/tuxayo 2020-11-10 21:47:00 UTC
Created attachment 113430 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 669 Victor Grousset/tuxayo 2020-11-10 21:47:10 UTC
Created attachment 113431 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 670 Victor Grousset/tuxayo 2020-11-10 21:54:22 UTC
Created attachment 113432 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 671 Victor Grousset/tuxayo 2020-11-10 21:54:33 UTC
Created attachment 113433 [details] [review]
Bug 19532: Updated schema files

Signed-off-by: David Nind <david@davidnind.com>
Comment 672 Victor Grousset/tuxayo 2020-11-10 21:54:43 UTC
Created attachment 113434 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 673 Victor Grousset/tuxayo 2020-11-10 21:54:55 UTC
Created attachment 113435 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>
Comment 674 Victor Grousset/tuxayo 2020-11-10 21:55:04 UTC
Created attachment 113436 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 675 Victor Grousset/tuxayo 2020-11-10 21:55:14 UTC
Created attachment 113437 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 676 Victor Grousset/tuxayo 2020-11-10 21:55:24 UTC
Created attachment 113438 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>
Comment 677 Victor Grousset/tuxayo 2020-11-10 21:55:34 UTC
Created attachment 113439 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>
Comment 678 Victor Grousset/tuxayo 2020-11-10 21:55:46 UTC
Created attachment 113440 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>
Comment 679 Victor Grousset/tuxayo 2020-11-10 21:55:56 UTC
Created attachment 113441 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>
Comment 680 Victor Grousset/tuxayo 2020-11-10 21:56:06 UTC
Created attachment 113442 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>
Comment 681 Victor Grousset/tuxayo 2020-11-10 21:56:16 UTC
Created attachment 113443 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 682 Victor Grousset/tuxayo 2020-11-10 21:56:29 UTC
Created attachment 113444 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>
Comment 683 Victor Grousset/tuxayo 2020-11-10 21:56:46 UTC
Created attachment 113445 [details] [review]
Bug 19532: (follow-up) Remove bad merge conflict markers

Signed-off-by: David Nind <david@davidnind.com>
Comment 684 Victor Grousset/tuxayo 2020-11-10 21:58:51 UTC
Rebase done for running the test suite passes, it passes :)
Comment 685 Marcel de Rooy 2021-01-29 09:22:04 UTC
This must be very frustrating, but PNA
Comment 686 Aleisha Amohia 2021-01-31 21:56:34 UTC
Created attachment 116121 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 687 Aleisha Amohia 2021-01-31 21:56:45 UTC
Created attachment 116122 [details] [review]
Bug 19532: Updated schema files
Comment 688 Aleisha Amohia 2021-01-31 21:56:55 UTC
Created attachment 116123 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 689 Aleisha Amohia 2021-01-31 21:57:10 UTC
Created attachment 116124 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>
Comment 690 Aleisha Amohia 2021-01-31 21:57:21 UTC
Created attachment 116125 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 691 Aleisha Amohia 2021-01-31 21:57:31 UTC
Created attachment 116126 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 692 Aleisha Amohia 2021-01-31 21:57:42 UTC
Created attachment 116127 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>
Comment 693 Aleisha Amohia 2021-01-31 21:57:54 UTC
Created attachment 116128 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>
Comment 694 Aleisha Amohia 2021-01-31 21:58:06 UTC
Created attachment 116129 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>
Comment 695 Aleisha Amohia 2021-01-31 21:58:17 UTC
Created attachment 116130 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>
Comment 696 Aleisha Amohia 2021-01-31 21:58:28 UTC
Created attachment 116131 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>
Comment 697 Aleisha Amohia 2021-01-31 21:58:39 UTC
Created attachment 116132 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 698 Aleisha Amohia 2021-01-31 21:58:50 UTC
Created attachment 116133 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>
Comment 699 Aleisha Amohia 2021-01-31 21:59:01 UTC
Created attachment 116134 [details] [review]
Bug 19532: (follow-up) Remove bad merge conflict markers

Signed-off-by: David Nind <david@davidnind.com>
Comment 700 Aleisha Amohia 2021-02-01 02:20:08 UTC
Switching back to Signed Off as was the status before recent rebasing.
Comment 701 Aleisha Amohia 2021-03-16 02:18:07 UTC
Created attachment 118267 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 702 Aleisha Amohia 2021-03-16 02:18:23 UTC
Created attachment 118268 [details] [review]
Bug 19532: Updated schema files
Comment 703 Aleisha Amohia 2021-03-16 02:18:36 UTC
Created attachment 118269 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 704 Aleisha Amohia 2021-03-16 02:18:48 UTC
Created attachment 118270 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>
Comment 705 Aleisha Amohia 2021-03-16 02:19:01 UTC
Created attachment 118271 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 706 Aleisha Amohia 2021-03-16 02:19:17 UTC
Created attachment 118272 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 707 Aleisha Amohia 2021-03-16 02:19:32 UTC
Created attachment 118273 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>
Comment 708 Aleisha Amohia 2021-03-16 02:19:49 UTC
Created attachment 118274 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>
Comment 709 Aleisha Amohia 2021-03-16 02:20:07 UTC
Created attachment 118275 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>
Comment 710 Aleisha Amohia 2021-03-16 02:20:19 UTC
Created attachment 118276 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>
Comment 711 Aleisha Amohia 2021-03-16 02:20:33 UTC
Created attachment 118277 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>
Comment 712 Aleisha Amohia 2021-03-16 02:20:47 UTC
Created attachment 118278 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 713 Aleisha Amohia 2021-03-16 02:21:01 UTC
Created attachment 118279 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>
Comment 714 Aleisha Amohia 2021-03-16 02:21:14 UTC
Created attachment 118280 [details] [review]
Bug 19532: (follow-up) Remove bad merge conflict markers

Signed-off-by: David Nind <david@davidnind.com>
Comment 715 Nick Clemens 2021-06-16 14:25:35 UTC
Notices and DB update conflicts
Comment 716 Aleisha Amohia 2021-07-21 03:47:39 UTC
Created attachment 122993 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 717 Aleisha Amohia 2021-07-21 03:47:51 UTC
Created attachment 122994 [details] [review]
Bug 19532: Updated schema files
Comment 718 Aleisha Amohia 2021-07-21 03:48:02 UTC
Created attachment 122995 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 719 Aleisha Amohia 2021-07-21 03:48:14 UTC
Created attachment 122996 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>
Comment 720 Aleisha Amohia 2021-07-21 03:48:26 UTC
Created attachment 122997 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 721 Aleisha Amohia 2021-07-21 03:48:37 UTC
Created attachment 122998 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 722 Aleisha Amohia 2021-07-21 03:48:50 UTC
Created attachment 122999 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>
Comment 723 Aleisha Amohia 2021-07-21 03:49:04 UTC
Created attachment 123000 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>
Comment 724 Aleisha Amohia 2021-07-21 03:49:18 UTC
Created attachment 123001 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>
Comment 725 Aleisha Amohia 2021-07-21 03:49:33 UTC
Created attachment 123002 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>
Comment 726 Aleisha Amohia 2021-07-21 03:49:45 UTC
Created attachment 123003 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>
Comment 727 Aleisha Amohia 2021-07-21 03:49:56 UTC
Created attachment 123004 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 728 Aleisha Amohia 2021-07-21 03:50:08 UTC
Created attachment 123005 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>
Comment 729 David Nind 2021-10-10 20:31:52 UTC
Hi Aleisha.

Patches no longer apply 8-(...

Note: I will make it a priority for me to review and sign-off once it applies again. It would be nice to get all your hard work into master (finally!).

Applying: Bug 19532: Database and installer stuff
Using index info to reconstruct a base tree...
M	C4/Auth.pm
M	Koha/CirculationRules.pm
M	Makefile.PL
M	admin/smart-rules.pl
M	installer/data/mysql/en/mandatory/sample_notices.yml
A	installer/data/mysql/fr-CA/obligatoire/sample_notices.sql
M	installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql
M	installer/data/mysql/kohastructure.sql
M	installer/data/mysql/mandatory/sysprefs.sql
M	installer/data/mysql/mandatory/userpermissions.sql
A	installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql
M	koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc
M	koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
M	koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref
M	koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt
Falling back to patching base and 3-way merge...
Auto-merging koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt
Auto-merging koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref
Auto-merging koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
CONFLICT (content): Merge conflict in koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
Auto-merging koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc
CONFLICT (modify/delete): installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql deleted in HEAD and modified in Bug 19532: Database and installer stuff. Version Bug 19532: Database and installer stuff of installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql left in tree.
Auto-merging installer/data/mysql/mandatory/userpermissions.sql
Auto-merging installer/data/mysql/mandatory/sysprefs.sql
Auto-merging installer/data/mysql/kohastructure.sql
Auto-merging installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql
CONFLICT (content): Merge conflict in installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql
CONFLICT (modify/delete): installer/data/mysql/fr-CA/obligatoire/sample_notices.sql deleted in HEAD and modified in Bug 19532: Database and installer stuff. Version Bug 19532: Database and installer stuff of installer/data/mysql/fr-CA/obligatoire/sample_notices.sql left in tree.
Auto-merging installer/data/mysql/en/mandatory/sample_notices.yml
Auto-merging admin/smart-rules.pl
Auto-merging Makefile.PL
Auto-merging Koha/CirculationRules.pm
Auto-merging C4/Auth.pm
error: Failed to merge in the changes.
Patch failed at 0001 Bug 19532: Database and installer stuff
Comment 730 Aleisha Amohia 2021-10-14 03:56:12 UTC
Created attachment 126244 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>
Comment 731 Aleisha Amohia 2021-10-14 03:56:33 UTC
Created attachment 126245 [details] [review]
Bug 19532: Updated schema files
Comment 732 Aleisha Amohia 2021-10-14 03:57:12 UTC
Created attachment 126246 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 733 Aleisha Amohia 2021-10-14 03:57:51 UTC
Created attachment 126247 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>
Comment 734 Aleisha Amohia 2021-10-14 03:58:05 UTC
Created attachment 126248 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 735 Aleisha Amohia 2021-10-14 03:58:35 UTC
Created attachment 126249 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>
Comment 736 Aleisha Amohia 2021-10-14 03:58:50 UTC
Created attachment 126250 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>
Comment 737 Aleisha Amohia 2021-10-14 03:59:14 UTC
Created attachment 126251 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>
Comment 738 Aleisha Amohia 2021-10-14 03:59:29 UTC
Created attachment 126252 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>
Comment 739 Aleisha Amohia 2021-10-14 04:00:06 UTC
Created attachment 126253 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>
Comment 740 Aleisha Amohia 2021-10-14 04:00:19 UTC
Created attachment 126254 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>
Comment 741 Aleisha Amohia 2021-10-14 04:00:37 UTC
Created attachment 126255 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 742 Aleisha Amohia 2021-10-14 04:01:37 UTC
Created attachment 126256 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>
Comment 743 Aleisha Amohia 2021-10-14 04:01:55 UTC
Created attachment 126257 [details] [review]
Bug 19532: (follow-up) Fix calls and syspref settings
Comment 744 David Nind 2021-10-18 08:56:59 UTC
Hi Aleisha.

I started around Friday, but didn't get very far...

From what I can recall (pun intended!), these tests failed:

prove t/db_dependent/Koha/Recall.t
prove t/db_dependent/Koha/Recalls.t

Today (Monday), the patch no longer applies:

Apply? [(y)es, (n)o, (i)nteractive] y
Applying: Bug 19532: Database and installer stuff
Applying: Bug 19532: Updated schema files
Applying: Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall
Applying: Bug 19532: Recalls objects and tests
Applying: Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation
Applying: Bug 19532: Other objects used in recalls feature
Applying: Bug 19532: Recalls on OPAC
Applying: Bug 19532: Recalls on intranet
Using index info to reconstruct a base tree...
M	circ/circulation.pl
M	koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
Falling back to patching base and 3-way merge...
Auto-merging koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
CONFLICT (content): Merge conflict in koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
Auto-merging circ/circulation.pl
error: Failed to merge in the changes.
Patch failed at 0001 Bug 19532: Recalls on intranet
Comment 745 Aleisha Amohia 2021-10-18 20:52:09 UTC
Created attachment 126453 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>
Comment 746 Aleisha Amohia 2021-10-18 20:52:25 UTC
Created attachment 126454 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>
Comment 747 Aleisha Amohia 2021-10-18 20:52:48 UTC
Created attachment 126455 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>
Comment 748 Aleisha Amohia 2021-10-18 20:53:06 UTC
Created attachment 126456 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>
Comment 749 Aleisha Amohia 2021-10-18 20:53:18 UTC
Created attachment 126457 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>
Comment 750 Aleisha Amohia 2021-10-18 20:53:31 UTC
Created attachment 126458 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>
Comment 751 Aleisha Amohia 2021-10-18 20:53:42 UTC
Created attachment 126459 [details] [review]
Bug 19532: (follow-up) Fix calls and syspref settings
Comment 752 Aleisha Amohia 2021-10-18 20:53:55 UTC
Created attachment 126460 [details] [review]
Bug 19532: (follow-up) Fixing tests
Comment 753 David Nind 2021-10-18 23:49:43 UTC
Thanks Aleisha!

Patches now apply and tests all pass - on with going through the test plan....

David
Comment 754 Aleisha Amohia 2021-10-19 00:59:39 UTC
Fingers crossed!
Comment 755 Aleisha Amohia 2021-10-19 03:22:18 UTC
Created attachment 126469 [details] [review]
Bug 19532: (follow-up) Fixing tests and can_be_recalled checks
Comment 756 Aleisha Amohia 2021-10-19 03:23:56 UTC
Created attachment 126470 [details] [review]
Bug 19532: (follow-up) Fixing tests and can_be_recalled checks
Comment 757 David Nind 2021-10-20 01:26:20 UTC
Hi Aleisha, I finally finished running through the test plan!

Two items where I had issues:

1. Steps 61 + 100: I get an error trace when accessing Circulation > Recalls awaiting pickup (http://127.0.0.1:8081/cgi-bin/koha/recalls/recalls_waiting.pl), see partial details below.

2. Error when running expiry cronjob (perl misc/cronjobs/recalls/expire_recalls.pl):
   . Step 112: 
     - Undefined subroutine &main::dt_from_string called at misc/cronjobs/recalls/expire_recalls.pl line 42.
     - Recall not expired - still showing as 'Requested'
   . Step 118: 
     - Undefined subroutine &main::dt_from_string called at misc/cronjobs/recalls/expire_recalls.pl line 53.
     - Recall not expired - still showing as 'Ready for pickup'
   . Step 128:
     - Undefined subroutine &main::dt_from_string called at misc/cronjobs/recalls/expire_recalls.pl line 53.
     - Recall not expired - still showing as 'Ready for pickup'

David

Error trace - recalls_waiting.pl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Undefined subroutine &CGI::Compile::ROOT::kohadevbox_koha_recalls_recalls_waiting_2epl::dt_from_string called at /kohadevbox/koha/recalls/recalls_waiting.pl line 58

    in (eval) at /kohadevbox/koha/recalls/recalls_waiting.pl line 58

       55:     my $borrower = Koha::Patrons->find( $loggedinuser );
       56:     my @over;
       57:     my $maxdelay = C4::Context->preference('RecallsMaxPickUpDelay') || 7;
       58:     my $today = dt_from_string();
       59:     foreach my $r ( @recalls ){
       60:         my $lastwaitingday = dt_from_string( $r->waitingdate )->add( days => $maxdelay );
       61:         if ( $today > $lastwaitingday ){

    in CGI::Compile::ROOT::kohadevbox_koha_recalls_recalls_waiting_2epl::__ANON__ at /kohadevbox/koha/recalls/recalls_waiting.pl line 2

        1: #!/usr/bin/perl
        2: 
        3: # Copyright 2020 Aleisha Amohia <aleisha@catalyst.net.nz>
        4: #
        5: # This file is part of Koha.

    Show function arguments
    in CGI::Compile::ROOT::kohadevbox_koha_recalls_recalls_waiting_2epl::recalls_waiting_2epl at /usr/share/perl5/CGI/Compile.pm line 151

      148:             # this is necessary for MSWin32
      149:             my $orig_warn = $SIG{__WARN__} || sub { warn(@_) };
      150:             local $SIG{__WARN__} = sub { $orig_warn->(@_) unless $_[0] =~ /^No such signal/ };
      151:             $code->($self, $data, $path, $dir, \@args)
      152:         };
      153:     };
      154: 

    in CGI::Emulate::PSGI::__ANON__ at /usr/share/perl5/CGI/Emulate/PSGI.pm line 30

       27:                 local *STDOUT = $stdout;
       28:                 local *STDERR = $env->{'psgi.errors'};
       29: 
       30:                 $code->();
       31:             }
       32:         }
       33: 
....


Notes for myself - SQL queries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Step 111: SQL should be: UPDATE recalls SET expirationdate = NOW() - interval 2 day WHERE recall_id = X;
- Step 127: SQL should be: UPDATE recalls SET waitingdate = NOW() - interval 2 day WHERE recall_id = X;
- Step 133: SQL should be: UPDATE issues SET date_due = NOW() - interval 2 day WHERE issue_id = X;
- Step 134: Script path should be recalls (not recall): perl misc/cronjobs/recalls/overdue_recalls.pl
- Step 150: SQL should be: UPDATE issues SET date_due = NOW() - interval 2 day WHERE issue_id = X;
Comment 758 Aleisha Amohia 2021-10-20 04:14:52 UTC
Created attachment 126565 [details] [review]
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks
Comment 759 Aleisha Amohia 2021-10-20 04:15:43 UTC
(In reply to David Nind from comment #757)
> Hi Aleisha, I finally finished running through the test plan!
> 
> Two items where I had issues:
> 
Thanks David, I've attached a commit that hopefully fixes these!
Comment 760 David Nind 2021-10-20 10:06:22 UTC
Created attachment 126566 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 761 David Nind 2021-10-20 10:06:40 UTC
Created attachment 126568 [details] [review]
Bug 19532: Updated schema files

Signed-off-by: David Nind <david@davidnind.com>
Comment 762 David Nind 2021-10-20 10:07:07 UTC
Created attachment 126569 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 763 David Nind 2021-10-20 10:08:01 UTC
Created attachment 126570 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 764 David Nind 2021-10-20 10:08:28 UTC
Created attachment 126571 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 765 David Nind 2021-10-20 10:08:59 UTC
Created attachment 126572 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 766 David Nind 2021-10-20 10:09:21 UTC
Created attachment 126573 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 767 David Nind 2021-10-20 10:09:50 UTC
Created attachment 126574 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 768 David Nind 2021-10-20 10:10:23 UTC
Created attachment 126575 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 769 David Nind 2021-10-20 10:10:42 UTC
Created attachment 126576 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 770 David Nind 2021-10-20 10:11:00 UTC
Created attachment 126577 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 771 David Nind 2021-10-20 10:11:24 UTC
Created attachment 126578 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 772 David Nind 2021-10-20 10:11:57 UTC
Created attachment 126579 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 773 David Nind 2021-10-20 10:12:24 UTC
Created attachment 126580 [details] [review]
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks

Signed-off-by: David Nind <david@davidnind.com>
Comment 774 Marcel de Rooy 2021-10-20 11:29:57 UTC
The many-to-many relationship 'ordernumbers' is trying to create a utility method
called set_ordernumbers.
This will completely overwrite one such already existing method on class
Koha::Schema::Result::Borrower.

 FAIL   C4/InstallAuth.pm
   FAIL   pod
                *** WARNING: line containing nothing but whitespace in paragraph  in file C4/InstallAuth.pm
Comment 775 Marcel de Rooy 2021-10-20 11:31:07 UTC
Having (serious) doubts if we should add these methods to the plural object:

+    my ( $recall, $due_interval, $due_date ) = Koha::Recalls->add_recall({
+        patron => $patron_object,
+        biblio => $biblio_object,
+        branchcode => $branchcode,
+        item => $item_object,
+        expirationdate => $expirationdate,
+        interface => 'OPAC',
+    });

+=head3 move_recall
+
+    my $message = Koha::Recalls->move_recall({
+        recall_id = $recall_id,
+        action => $action,
+        itemnumber => $itemnumber,
+        borrowernumber => $borrowernumber,
+    });
Comment 776 Marcel de Rooy 2021-10-20 11:31:57 UTC
 Koha/Recall.pm                | 476 ++++++++++++++++++++++++++++++++++
 Koha/Recalls.pm               | 212 +++++++++++++++
 Koha/Schema/Result/Recall.pm  |  38 +++

Dont put Schema files in a regular patch please! Forbidden!
Comment 777 Marcel de Rooy 2021-10-20 11:35:36 UTC
XSLT module

+        if ( $recalls->count ) {
+            # recalls take priority over holds
+            $status = 'Waiting';
+        }

Hmm. Are we lifting here on a hold status and report things like that in the opac results ?
Comment 778 Marcel de Rooy 2021-10-20 11:38:05 UTC
 FAIL   Koha/Recall.pm
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Koha/Recall.pm had compilation errors.

 FAIL   Koha/Recalls.pm
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Compilation failed in require

 FAIL   t/db_dependent/Koha/Recall.t
   FAIL   file permissions
                File must have the exec flag
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
                t/db_dependent/Koha/Recall.t had compilation errors.

 FAIL   t/db_dependent/Koha/Recalls.t
   FAIL   file permissions
                File must have the exec flag
Comment 779 Marcel de Rooy 2021-10-20 11:39:50 UTC
 FAIL   C4/Overdues.pm
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use

 FAIL   misc/cronjobs/recalls/expire_recalls.pl
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Compilation failed in require
                Compilation failed in require
                BEGIN failed--compilation aborted

 FAIL   misc/cronjobs/recalls/overdue_recalls.pl
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use

 FAIL   t/db_dependent/Circulation/CalcFine.t
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
Comment 780 Marcel de Rooy 2021-10-20 11:44:51 UTC
 FAIL   koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc
   FAIL   forbidden patterns
                forbidden pattern: Font Awesome icons need the aria-hidden attribute for accessibility purpose (see bug 25166)  (line 15)
   FAIL   valid_template
                Attempt to reload Koha/Template/Plugin/Biblio.pm aborted.
Compilation failed in require at /usr/lib/x86_64-linux-gnu/perl5/5.28/Template/Plugins.pm line 206.

 FAIL   koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-recalls.tt
   OK     filters
   FAIL   forbidden patterns
                forbidden pattern: Don't use the title-string class for sorting (bug 27934) (line 33)

 FAIL   koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt
   OK     filters
   FAIL   forbidden patterns
                forbidden pattern: Don't use the title-string class for sorting (bug 27934) (line 777)

 FAIL   opac/opac-recall.pl
   FAIL   critic
                Subroutine "new" called using indirect syntax at line 26, column 13. See page 349 of PBP.
   FAIL   forbidden patterns
                forbidden pattern: Script permissions is authnotrequired => 0, it could be correct for an OPAC script if it is was you really want error (bug 24663) (line 32)
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
Comment 781 Marcel de Rooy 2021-10-20 11:50:38 UTC
I planned to run qa tools on every patch. But I would recommend that you would have done the same. It is just too much..
So just pasting the last few, and leaving it there.

 FAIL   svc/recall
   FAIL   critic
                Subroutine "new" called using indirect syntax at line 30, column 13. See page 349 of PBP.
   OK     file permissions
   OK     forbidden patterns
   OK     git manipulation
   OK     pod
   SKIP   spelling
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use

 FAIL   recalls/request.pl
   OK     critic
   OK     file permissions
   FAIL   forbidden patterns
                forbidden pattern: Script permissions is authnotrequired => 0, it could be correct for an OPAC script if it is was you really want error (bug 24663) (line 33)
   OK     git manipulation
   OK     pod
   SKIP   spelling
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use

 FAIL   recalls/recalls_waiting.pl
   FAIL   critic
                Subroutine "new" called using indirect syntax at line 28, column 13. See page 349 of PBP.
   OK     file permissions
   FAIL   forbidden patterns
                forbidden pattern: Script permissions is authnotrequired => 0, it could be correct for an OPAC script if it is was you really want error (bug 24663) (line 34)
   OK     git manipulation
   OK     pod
   SKIP   spelling
   FAIL   valid
                Bareword "dt_from_string" not allowed while "strict subs" in use
                Bareword "dt_from_string" not allowed while "strict subs" in use
Comment 782 Marcel de Rooy 2021-10-20 11:51:16 UTC
+                $.ajax({
+                    url: '/cgi-bin/koha/svc/recall',
+                    type: 'POST',
+                    dataType: 'json',
+                    data: ajaxData,
+                })

This is the old way of things. (Ok, historical patches.) No API ?
Comment 783 Marcel de Rooy 2021-10-20 12:14:30 UTC
All appreciation for your hard work and perseverance. This feature will be welcomed by many libraries. So it is great that you share it.

I am just stumbling over its size. It might be a reason why this patch set takes so long too.

Just picking the largest patches:

 7 files changed, 1093 insertions(+), 1 deletion(-)
 16 files changed, 1153 insertions(+), 12 deletions(-)
 15 files changed, 665 insertions(+), 4 deletions(-)
 44 files changed, 2090 insertions(+), 12 deletions(-)

We're adding over 5000 lines here on one report. Clearly, this report should have broken down in several reports under an omnibus (imho).
Certainly, making a good split is (much) more work for you. But how much time did you spend on rebasing the whole thing over and over again?

How should we do a good QA job when adding so much code. I did a "diagonal" QA now. Few comments, asked a few questions now. Most looks good to me. But I cant do a full QA in some hours on such large patches. My intuition tells me that there will be quite a few bugs coming in now. And at a bad time, since we are close to release date..

Note that I am not asking you to split it up now. But perhaps we should define some guidelines on handling this kind of larger developments, making it easier to push well split portions and allowing still 'unused' code to go in already when there is a community commitment to finish the job?

Since we need more people to test this code, I am putting the status back to Needs Signoff.
Comment 784 Aleisha Amohia 2021-10-20 20:08:30 UTC
I understand where you're coming from, I know the size is massive, but honestly it's a bit frustrating to pick that apart now. 

If you look back, I first attached a much simpler iteration of recalls, but everyone scope creeped it while the clients we developed it for were happily using it and sponsoring further enhancements. 

This would have been avoided if it had been accepted in it's simpler state by the community, when it was a lot easier to QA. It's obviously since grown to become a fully fledged feature.

I can't reasonably keep maintaining it for our clients for years while upstream requires me to rebase it every few weeks and it still won't get pushed to main. 
At this point I would prefer if the QA team just gave me guidance on what I need to do to get this in to upstream Koha.
Comment 785 Marcel de Rooy 2021-10-21 06:48:01 UTC
(In reply to Aleisha Amohia from comment #784)
> I understand where you're coming from, I know the size is massive, but
> honestly it's a bit frustrating to pick that apart now. 

Agreed, and thats certainly not what I was saying.

> I can't reasonably keep maintaining it for our clients for years while
> upstream requires me to rebase it every few weeks and it still won't get
> pushed to main. 

Very clear. What you did already, is amazing. You cant go on like this.

> At this point I would prefer if the QA team just gave me guidance on what I
> need to do to get this in to upstream Koha.

We do need some coordination to get a patch of this size in. Note also that as e.g. comment358 shows the fundamentals of this design were questioned by Martin and maybe others. I understand that this remark was too late in the process. But this implies convincing (part of) the QA team also.
If we do, it seems already too late to push this into 21.11. So it should be done early after that release (imho).
I am putting this on the development meeting agenda for Oct 27 14 UTC (bad for NZL). Will also ask the QA manager for coordination.
Cant do much more as single QAer ;)
Comment 786 Victor Grousset/tuxayo 2021-10-22 01:21:56 UTC
(In reply to Marcel de Rooy from comment #781)
> I planned to run qa tools on every patch. But I would recommend that you
> would have done the same. It is just too much..

wouldn't this raise errors fixed in followup? You mean for each commit, checkout on it, run the qa tool on last commit, right?
Comment 787 Marcel de Rooy 2021-10-22 06:05:12 UTC
(In reply to Victor Grousset/tuxayo from comment #786)
> (In reply to Marcel de Rooy from comment #781)
> > I planned to run qa tools on every patch. But I would recommend that you
> > would have done the same. It is just too much..
> 
> wouldn't this raise errors fixed in followup? You mean for each commit,
> checkout on it, run the qa tool on last commit, right?

Surely. Whats fixed, is fixed.
Comment 788 Aleisha Amohia 2021-10-28 22:04:36 UTC
Hi all

How did the meeting go and what was decided for this bug?

Thanks
Aleisha
Comment 789 Marcel de Rooy 2021-10-29 06:16:43 UTC
(In reply to Aleisha Amohia from comment #788)

> How did the meeting go and what was decided for this bug?

Here a few important remarks from IRC:

14:37	Joubu	it's too late for 21.11 and we have plenty of things to focus on
14:37	cait1	it doesn't quite work as academics expect it
14:41	cait1	so maybe we could agree on making this a priority after release?
14:42	cait1	#agreed marcelr, fridolin and cait to look at recalls for QA after 21.11 release
14:44	cait1	i think they are moderated [recalls]
14:44	cait1	what we are looking for later might be unmoderated
14:45	ashimema	either way.. lets attack it as a group at the beginning of the next cycle.

So we had consensus about proceeding on recalls in its current form in view of time elapsed shortly after release. I have a recalls branch now too, might be fixing a few things too already.
Comment 790 Katrin Fischer 2021-10-29 08:10:38 UTC
The moderated/unmoderated got a bit confusing (my fault), but the summary about us teaming up on this once 21.11 is out the door is correct.
Comment 791 Aleisha Amohia 2021-12-06 22:56:57 UTC
I've developed this further for a university library so I have patches that would possibly help it to work more in the way that academic libraries might expect?

I'll contact you all about progressing with this.
Comment 792 Katrin Fischer 2021-12-06 23:05:53 UTC
(In reply to Aleisha Amohia from comment #791)
> I've developed this further for a university library so I have patches that
> would possibly help it to work more in the way that academic libraries might
> expect?
> 
> I'll contact you all about progressing with this.

Hi Aleisha, I volunteered to work on this at the beginning of this cycle, but have to admit, I still have to start digging into it. Any additional information is very welcome :)
Comment 793 Marcel de Rooy 2022-01-11 15:58:35 UTC
Created attachment 129305 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 794 Marcel de Rooy 2022-01-11 15:58:47 UTC
Created attachment 129306 [details] [review]
Bug 19532: Updated schema files

Signed-off-by: David Nind <david@davidnind.com>
Comment 795 Marcel de Rooy 2022-01-11 15:58:59 UTC
Created attachment 129307 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 796 Marcel de Rooy 2022-01-11 15:59:11 UTC
Created attachment 129308 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 797 Marcel de Rooy 2022-01-11 15:59:23 UTC
Created attachment 129309 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 798 Marcel de Rooy 2022-01-11 15:59:35 UTC
Created attachment 129310 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 799 Marcel de Rooy 2022-01-11 15:59:52 UTC
Created attachment 129311 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 800 Marcel de Rooy 2022-01-11 16:00:05 UTC
Created attachment 129312 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 801 Marcel de Rooy 2022-01-11 16:00:23 UTC
Created attachment 129313 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 802 Marcel de Rooy 2022-01-11 16:00:43 UTC
Created attachment 129314 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 803 Marcel de Rooy 2022-01-11 16:01:10 UTC
Created attachment 129315 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 804 Marcel de Rooy 2022-01-11 16:01:24 UTC
Created attachment 129316 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 805 Marcel de Rooy 2022-01-11 16:01:36 UTC
Created attachment 129317 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 806 Marcel de Rooy 2022-01-11 16:01:51 UTC
Created attachment 129318 [details] [review]
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks

Signed-off-by: David Nind <david@davidnind.com>
Comment 807 Marcel de Rooy 2022-01-11 16:02:06 UTC
Created attachment 129319 [details] [review]
Bug 19532: (QA follow-up) Enable XSLT statuses translation
Comment 808 Marcel de Rooy 2022-01-11 16:04:29 UTC
I rebased what we had. Didnt check yet.

Katrin, Fridolin, Aleisha, David, Victor: When can we work on this patch set this month? Would be handy to plan our actions now.
Comment 809 Katrin Fischer 2022-01-12 12:14:10 UTC
(In reply to Marcel de Rooy from comment #808)
> I rebased what we had. Didnt check yet.
> 
> Katrin, Fridolin, Aleisha, David, Victor: When can we work on this patch set
> this month? Would be handy to plan our actions now.

+1 

Time is sparse, but I'll try to make it work.
Comment 810 Marcel de Rooy 2022-01-13 07:23:16 UTC
(In reply to Katrin Fischer from comment #809)
> (In reply to Marcel de Rooy from comment #808)
> > I rebased what we had. Didnt check yet.
> > 
> > Katrin, Fridolin, Aleisha, David, Victor: When can we work on this patch set
> > this month? Would be handy to plan our actions now.
> 
> +1 
> 
> Time is sparse, but I'll try to make it work.

Thanks Katrin.
And the others?
Comment 811 Fridolin Somers 2022-01-15 07:24:34 UTC
Sure, I'm in.
At first look code looks pretty mature.
I'll listen to QA team.
Comment 812 Aleisha Amohia 2022-01-16 20:47:30 UTC
I started rewriting before Christmas but couldn't get it sorted in time. Will try to pick up again this week or next. Trying to work out the best way to split everything out.
Comment 813 Marcel de Rooy 2022-01-17 07:14:38 UTC
(In reply to Aleisha Amohia from comment #812)
> I started rewriting before Christmas but couldn't get it sorted in time.
> Will try to pick up again this week or next. Trying to work out the best way
> to split everything out.

Thanks for responding.
In order to prevent misunderstandings, are you talking about the current patches or development on top of this patch set?
If you are talking about the current set, it would be useless for us to work further on it when you will be rewriting it.
Please confirm!
Comment 814 Aleisha Amohia 2022-01-17 20:05:13 UTC
I am talking about the current patchset. My understanding was that as the patches currently are, they are too big and daunting to effectively test and QA.
Comment 815 Marcel de Rooy 2022-01-18 09:45:36 UTC
(In reply to Aleisha Amohia from comment #814)
> I am talking about the current patchset. My understanding was that as the
> patches currently are, they are too big and daunting to effectively test and
> QA.

Thanks for your quick response! We seem to have some kind of misunderstanding here. Note that I do not oppose your breaking it up but it will take you time once again. In view of the patch history I wrote earlier in comment783: "Note that I am not asking you to split it up now." So I was thinking about handling the current set and especially stressing that we would appreciate future submissions in another form.

See also comment785.
"We do need some coordination to get a patch of this size in."

Comment789:
"So we had consensus about proceeding on recalls in its current form in view of time elapsed shortly after release."

So perhaps you understand now the track that I was on?
Comment 816 Aleisha Amohia 2022-01-18 20:00:58 UTC
I see. In the email chain we had discussed reformatting but clearly there was some misunderstanding.

I had started rewriting things before Christmas but it was proving to be very difficult to split the patches out into different 'stages' of development.

My preference would be to rebase what is on here and bring it up to main, as long as the QA team is happy to coordinate in getting it through. 

Should I do that then?
Comment 817 Marcel de Rooy 2022-01-18 20:13:49 UTC
(In reply to Aleisha Amohia from comment #816)
> I see. In the email chain we had discussed reformatting but clearly there
> was some misunderstanding.
> 
> I had started rewriting things before Christmas but it was proving to be
> very difficult to split the patches out into different 'stages' of
> development.
> 
> My preference would be to rebase what is on here and bring it up to main, as
> long as the QA team is happy to coordinate in getting it through. 
> 
> Should I do that then?

Yes please check my latest rebase (Jan 11).
Comment 818 Katrin Fischer 2022-01-19 08:46:56 UTC
I understand the difficulties of splitting it up now, so totally ok working with the rebased patch set. Thx Marcel and Aleisha for clearing things up!
Comment 819 Aleisha Amohia 2022-02-16 04:04:56 UTC
Created attachment 130641 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 820 Aleisha Amohia 2022-02-16 04:05:12 UTC
Created attachment 130642 [details] [review]
Bug 19532: Updated schema files

Signed-off-by: David Nind <david@davidnind.com>
Comment 821 Aleisha Amohia 2022-02-16 04:05:35 UTC
Created attachment 130643 [details] [review]
Bug 19532: Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 822 Aleisha Amohia 2022-02-16 04:05:59 UTC
Created attachment 130644 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 823 Aleisha Amohia 2022-02-16 04:06:23 UTC
Created attachment 130645 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 824 Aleisha Amohia 2022-02-16 04:06:58 UTC
Created attachment 130646 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 825 Aleisha Amohia 2022-02-16 04:07:15 UTC
Created attachment 130647 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 826 Aleisha Amohia 2022-02-16 04:07:39 UTC
Created attachment 130648 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 827 Aleisha Amohia 2022-02-16 04:08:24 UTC
Created attachment 130649 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 828 Aleisha Amohia 2022-02-16 04:08:48 UTC
Created attachment 130650 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 829 Aleisha Amohia 2022-02-16 04:09:05 UTC
Created attachment 130651 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 830 Aleisha Amohia 2022-02-16 04:09:49 UTC
Created attachment 130652 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 831 Aleisha Amohia 2022-02-16 04:10:03 UTC
Created attachment 130653 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>
Comment 832 Aleisha Amohia 2022-02-16 04:10:19 UTC
Created attachment 130654 [details] [review]
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks

Signed-off-by: David Nind <david@davidnind.com>
Comment 833 Aleisha Amohia 2022-02-16 04:10:37 UTC
Created attachment 130655 [details] [review]
Bug 19532: (QA follow-up) Enable XSLT statuses translation
Comment 834 Aleisha Amohia 2022-02-16 04:11:00 UTC
Created attachment 130656 [details] [review]
Bug 19532: (follow-up) Fixes along recall workflow
Comment 835 Marcel de Rooy 2022-02-25 08:00:41 UTC
Still applied on current master (more or less: minor conflicts)
commit 4cc3c0a760df4ddd96cd7bdadc4a766343f0a103 

Will be spending some time on it now and next week, and hoping that the other volunteers will be able to do so too..
Comment 836 Marcel de Rooy 2022-02-25 10:27:47 UTC
Some intermediate observations. Will continue next week.

TODO FAIL t/db_dependent/Circulation/CalcFine.t
* The method Koha::Recalls->item_level_recall is not covered by tests!
=> Error in sub CalcFine (Overdues.pm)
=> This is related to the recent wantarray change in Koha: you do no longer receive individual results, but a result set

TODO t/db_dependent/Koha/Biblio.t
#   Failed test 'Recalls tests'
=> Related to the wantarray thing again
Example:     #          got: 'Koha::Recalls=HASH(0x55e97949bf68)'    #     expected: '3'

TODO t/db_dependent/Circulation.t
# Subtest: CanBookBeRenewed tests     # Looks like you planned 97 tests but ran 24.
The method Koha::Recalls->item_level_recall is not covered by tests!
Trace begun at /usr/share/koha/Koha/Objects.pm line 572
Koha::Objects::AUTOLOAD('Koha::Recalls=HASH(0x5566928b68a0)') called at /usr/share/koha/C4/Overdues.pm line 267
C4::Overdues::CalcFine('HASH(0x556692872ac0)', 'v1HCIX_4rK', 'u4RykAzG', 'DateTime=HASH(0x5566928c98a0)', 'DateTime=HASH(0x556692855198)') called at t/db_dependent/Circulation.t line 700
=> Looks like the same problem: wantarray trouble again
Comment 837 Marcel de Rooy 2022-02-25 10:28:51 UTC
QA tools is quite happy, here are two items:

TODO koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-recalls.tt
* forbidden pattern: Don't use the title-string class for sorting (bug 27934) (line 39)
TODO koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt
* forbidden pattern: Don't use the title-string class for sorting (bug 27934) (line 760)

See the referenced bug for pointers to resolve it.
Comment 838 Marcel de Rooy 2022-02-25 10:31:12 UTC
Created attachment 131108 [details] [review]
Bug 19532: (QA follow-up) Fixing unit tests

(Trivial:) Number of tests in Koha/Item.t
Added a $patron object to resolve warnings like:
* Global symbol "$patron" requires explicit package name (did you forget to declare "my $patron"?) at t/db_dependent/Koha/Patron.t line 1064.
Fixed CanItemBeReserved call in Holds.t, number of tests adjusted
Comment 839 Aleisha Amohia 2022-02-27 23:18:25 UTC
Created attachment 131156 [details] [review]
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks

Signed-off-by: David Nind <david@davidnind.com>
Comment 840 Aleisha Amohia 2022-02-27 23:18:51 UTC
Created attachment 131157 [details] [review]
Bug 19532: (QA follow-up) Enable XSLT statuses translation
Comment 841 Aleisha Amohia 2022-02-27 23:19:15 UTC
Created attachment 131158 [details] [review]
Bug 19532: (follow-up) Fixes along recall workflow
Comment 842 Aleisha Amohia 2022-02-27 23:19:44 UTC
Created attachment 131159 [details] [review]
Bug 19532: (QA follow-up) Fixing unit tests

(Trivial:) Number of tests in Koha/Item.t
Added a $patron object to resolve warnings like:
* Global symbol "$patron" requires explicit package name (did you forget to declare "my $patron"?) at t/db_dependent/Koha/Patron.t line 1064.
Fixed CanItemBeReserved call in Holds.t, number of tests adjusted
Comment 843 Aleisha Amohia 2022-02-27 23:20:02 UTC
Created attachment 131160 [details] [review]
Bug 19532: (follow-up) Fix for wantarray change and title-string
Comment 844 Aleisha Amohia 2022-02-27 23:24:50 UTC
(In reply to Marcel de Rooy from comment #835)
> Still applied on current master (more or less: minor conflicts)
> commit 4cc3c0a760df4ddd96cd7bdadc4a766343f0a103 
> 
> Will be spending some time on it now and next week, and hoping that the
> other volunteers will be able to do so too..

Have fixed the merge conflict and the failing tests and qa tests mentioned above.
Comment 845 Marcel de Rooy 2022-03-01 12:48:02 UTC
(In reply to Aleisha Amohia from comment #844)
> (In reply to Marcel de Rooy from comment #835)
> > Still applied on current master (more or less: minor conflicts)
> > commit 4cc3c0a760df4ddd96cd7bdadc4a766343f0a103 
> > 
> > Will be spending some time on it now and next week, and hoping that the
> > other volunteers will be able to do so too..
> 
> Have fixed the merge conflict and the failing tests and qa tests mentioned
> above.

Thx for doing that quickly. Resuming here now.
Comment 846 Marcel de Rooy 2022-03-01 15:40:39 UTC
Created attachment 131193 [details] [review]
Bug 19532: (QA follow-up) Fix few Koha::Recalls->search occurrences

Due to the wantarray change, we should fix this call in list context.
We should either use an iterator now or append as_list.
Comment 847 Marcel de Rooy 2022-03-01 15:48:16 UTC
Saw this warning in QA tools:

 FAIL   koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-recalls.tt
   FAIL   valid_template
                Attempt to reload Koha/Template/Plugin/KohaPlugins.pm aborted.
Compilation failed in require at /usr/lib/x86_64-linux-gnu/perl5/5.28/Template/Plugins.pm line 206.
SAME for koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt

The reload aborted on Template plugins I have seen incidentally on a few other reports, where we did spend quite some time to resolve it to no avail. Eventually they were ignored.

This report does not do anything with the KohaPlugins template plugin. So I think we can discard it.
Comment 848 Marcel de Rooy 2022-03-01 15:49:32 UTC
From code glancing:
Unfinished business?

+    } elsif ( $code eq 'RecallFound' ) {
+        ;
+    } elsif ( $code eq 'RecallNeedsTransfer' ) {
+        ;
+    } elsif ( $code eq 'TransferredRecall' ) {
+        ;
Comment 849 Aleisha Amohia 2022-03-01 22:55:31 UTC
Created attachment 131213 [details] [review]
Bug 19532: (follow-up) Removing unnecessary code
Comment 850 Aleisha Amohia 2022-03-01 23:04:41 UTC
Cool I will ignore that warning about KohaPlugins then.


(In reply to Marcel de Rooy from comment #848)
> From code glancing:
> Unfinished business?
> 
> +    } elsif ( $code eq 'RecallFound' ) {
> +        ;
> +    } elsif ( $code eq 'RecallNeedsTransfer' ) {
> +        ;
> +    } elsif ( $code eq 'TransferredRecall' ) {
> +        ;



Not unfinished business, I was just copying the similar code above, but I have removed in latest follow-up.
Comment 851 Marcel de Rooy 2022-03-02 12:19:03 UTC
(In reply to Aleisha Amohia from comment #850)

> Not unfinished business, I was just copying the similar code above, but I
> have removed in latest follow-up.

Are you really really sure about that :) ?
Look here, read the else comment too !

     elsif ( $code eq 'ReturnClaims' ) {
         $template->param( ReturnClaims => $messages->{ReturnClaims} );
-    } elsif ( $code eq 'RecallFound' ) {
-        ;
-    } elsif ( $code eq 'RecallNeedsTransfer' ) {
-        ;
-    } elsif ( $code eq 'TransferredRecall' ) {
-        ;
     } else {
         die "Unknown error code $code";    # note we need all the (empty) elsif's above, or we die.
         # This forces the issue of staying in sync w/ Circulation.pm

In conclusion: We dont wanna die here, but as for ReturnClaims we could send a code to the template allowing to return something meaningful to the user?
Obsoleting the last patch now. Correct me when I am wrong.
Comment 852 Marcel de Rooy 2022-03-02 12:30:01 UTC
(In reply to Marcel de Rooy from comment #851)

> In conclusion: We dont wanna die here, but as for ReturnClaims we could send
> a code to the template allowing to return something meaningful to the user?
> Obsoleting the last patch now. Correct me when I am wrong.

And looking in context, I indeed see stuff like:

    elsif ( $code eq 'WrongTransfer' ) {
        ;    # FIXME... anything to do here?
    }
    elsif ( $code eq 'WrongTransferItem' ) {
        ;    # FIXME... anything to do here?
    }

So lets just leave as-is now.
Comment 853 Marcel de Rooy 2022-03-02 12:33:13 UTC
 FAIL   C4/Circulation.pm
   FAIL   pod coverage
                POD is missing for AddOfflineOperation
                POD is missing for CheckValidBarcode
                POD is missing for DeleteOfflineOperation
                POD is missing for GetOfflineOperation
                POD is missing for GetOfflineOperations
                POD is missing for GetRenewCount
                POD is missing for GetTopIssues
                POD is missing for ProcessOfflineIssue
                POD is missing for ProcessOfflineOperation
                POD is missing for ProcessOfflinePayment
                POD is missing for ProcessOfflineReturn
                POD is missing for ReturnLostItem
                POD is missing for TooMany
                POD is missing for checkHighHolds

C4::Circulation has a Pod::Coverage rating of 0.702127659574468
The following are uncovered: AddOfflineOperation, CheckValidBarcode, DeleteOfflineOperation, GetOfflineOperation, GetOfflineOperations, GetRenewCount, GetTopIssues, ProcessOfflineIssue, ProcessOfflineOperation, ProcessOfflinePayment, ProcessOfflineReturn, ReturnLostItem, TooMany, checkHighHolds

This can be safely ignored: we dont add subs here, just some changes.
Comment 854 Marcel de Rooy 2022-03-02 12:42:42 UTC
Same remark for:

 FAIL   C4/Overdues.pm
   FAIL   pod coverage
                POD is missing for 'GetWdayFromItemnumber'

and

 FAIL   C4/XSLT.pm
   FAIL   pod coverage
                POD is missing for get_xsl_filename
                POD is missing for get_xslt_sysprefs
Comment 855 Marcel de Rooy 2022-03-02 12:55:33 UTC
I remember to have posted this before, but these lines show me that Recalls does not support itemtype notforloan:

+ return 0 if ( $self->notforloan != 0 );
OR +    my @items = Koha::Items->search({ biblionumber => $self->biblionumber, itemlost => 0, withdrawn => 0, notforloan => 0 })->as_list;
OR +                                                        [% IF ( item.notforloan ) %]

The only check for notforloan in the new code is made only on the item, not on the itemtype.
Dont think that we need to fix it here now. No blocker.

I am wondering btw: If we can only recall something checked out, when would notforloan come into play actually? Seems to be an edge case like item was checked out, notforloan was activated after that, etc.
Comment 856 Marcel de Rooy 2022-03-02 14:41:08 UTC
Created attachment 131257 [details] [review]
Bug 19532: (QA follow-up) Fix fine calculation by inserting biblionumber

The fines cron job uses Getoverdues to pass issue info to CalcFine.
It took me a while to realize that the overdue hash does not contain
a biblionumber. When testing CalcFine, we pass an item hash that
does include one.

So what happened? $item->{biblionumber} is undefined when it comes from
Getoverdues and no recall overdue fine is calculated, only a regular one.

Simple fix (without any impact): Add a biblionumber to Getoverdues.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Tested with fines.pl: recall fine applied now.
Ran some Circulation and Overdues unit tests.
Comment 857 Marcel de Rooy 2022-03-02 14:45:17 UTC
(In reply to Marcel de Rooy from comment #856)
> Created attachment 131257 [details] [review] [review]
> Bug 19532: (QA follow-up) Fix fine calculation by inserting biblionumber
> 
> The fines cron job uses Getoverdues to pass issue info to CalcFine.
> It took me a while to realize that the overdue hash does not contain
> a biblionumber. When testing CalcFine, we pass an item hash that
> does include one.
> 
> So what happened? $item->{biblionumber} is undefined when it comes from
> Getoverdues and no recall overdue fine is calculated, only a regular one.
> 
> Simple fix (without any impact): Add a biblionumber to Getoverdues.
> 
> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
> Tested with fines.pl: recall fine applied now.
> Ran some Circulation and Overdues unit tests.

This was a serious bug! The fines cron job would never ever calculate the correct recalls fine when you relied on Getoverdues without biblionumber..

I didnt see any reference to testing this process in the large test plan btw ;)
Comment 858 Marcel de Rooy 2022-03-02 15:19:35 UTC
TODO We need to add two new cronjobs to the cron files (debian side and example file somewhere in etc folder)

misc/cronjobs/recalls/expire_recalls.pl
misc/cronjobs/recalls/overdue_recalls.pl

They both do a recalls search. If one has not activated recalls, no records are found. Early exit. All fine.

Note the following:
"check if item has been recalled. recall should have been marked Overdue by cronjob, so only look at overdue recalls"
=> So we need to run overdue_recalls BEFORE fines (CalcFine)
Comment 859 Marcel de Rooy 2022-03-02 15:30:47 UTC
Created attachment 131260 [details] [review]
Bug 19532: (QA follow-up) Move as_list to iterator based loop

Adjusting both new cron jobs.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 860 Marcel de Rooy 2022-03-02 15:50:50 UTC
Created attachment 131261 [details] [review]
Bug 19532: Database and installer stuff

- Add recalls table
- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time
- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog
- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM)
- Add print notice (RECALL_REQUESTER_DET)
- Add user permission - recalls, manage_recalls
- Add Recall and CancelRecall enum options for branchtransfers reason

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 861 Marcel de Rooy 2022-03-02 15:51:04 UTC
Created attachment 131262 [details] [review]
Bug 19532: [DBIx] Updated schema files

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 862 Marcel de Rooy 2022-03-02 15:51:24 UTC
Created attachment 131263 [details] [review]
Bug 19532: [DBIx] Add boolean flags to recalls.old and recalls.item_level_recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 863 Marcel de Rooy 2022-03-02 15:51:37 UTC
Created attachment 131264 [details] [review]
Bug 19532: [DBIx] Schema change for Recalls

Separated from the "Recalls-objects-and-tests" patch

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 864 Marcel de Rooy 2022-03-02 15:51:50 UTC
Created attachment 131265 [details] [review]
Bug 19532: Recalls objects and tests

Koha/Recall.pm
- biblio
- item
- patron
- library
- checkout
- requested
- waiting
- overdue
- in_transit
- expired
- cancelled
- finished
- calc_expirationdate
- start_transfer
- revert_transfer
- set_waiting
- revert_waiting
- set_overdue
- set_expired
- set_cancelled
- set_finished
- should_be_overdue

Koha/Recalls.pm
- add_recall
- move_recall

and relevant tests

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 865 Marcel de Rooy 2022-03-02 15:52:03 UTC
Created attachment 131266 [details] [review]
Bug 19532: Expiry and overdue cronjobs, and overdue fine calculation

- misc/cronjobs/recalls/expire_recalls.pl
- misc/cronjobs/recalls/overdue_recalls.pl
- tests for overdue fines in t/db_dependent/Circulation/CalcFine.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 866 Marcel de Rooy 2022-03-02 15:52:16 UTC
Created attachment 131267 [details] [review]
Bug 19532: Other objects used in recalls feature

- biblio->recalls
- biblio->can_be_recalled
- item->recall
- item->can_be_recalled
- item->can_set_waiting_recall
- item->check_recalls
- patron->recalls
- Biblio.RecallsCount

and relevant tests
- t/db_dependent/Stats.t
- t/db_dependent/Koha/Item.t
- t/db_dependent/Koha/Biblio.t
- t/db_dependent/Koha/Patron.t
- t/db_dependent/XSLT.t
- t/db_dependent/Search.t
- t/db_dependent/Holds.t
- t/db_dependent/Circulation/transferbook.t
- t/db_dependent/Circulation.t

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 867 Marcel de Rooy 2022-03-02 15:52:29 UTC
Created attachment 131268 [details] [review]
Bug 19532: Recalls on OPAC

- place a biblio-level or item-level recall via the biblio detail page, OPAC search results, or course reserves
- view or cancel your active recalls from 'your summary' recalls tab
- view all active and inactive (and cancel active) recalls from 'your recall history'
- stopped from placing a reserve on an item that the patron has already recalled

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 868 Marcel de Rooy 2022-03-02 15:52:43 UTC
Created attachment 131269 [details] [review]
Bug 19532: Recalls on intranet

See recalls on Intranet
- old recalls (all inactive recalls)
- recalls queue (all active recalls) - cancel, expire, revert waiting status, multiple cancel, mark overdue
- recalls to pull (available but not yet waiting) - cancel
- recalls awaiting pickup (awaiting pickup, awaiting pickup more than RecallMaxPickUpDelay days) - expire, revert waiting status
- overdue recalls (overdue to be returned) - cancel, multiple cancel
- biblio recalls tab (all active recalls relevant to this bib) - cancel, expire, revert waiting status, mark overdue
- patron recalls tab (all active recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- patron recalls history tab (all recalls relevant to this patron) - cancel, expire, revert waiting status, mark overdue
- log viewer

and the general circulation of recalls

== TEST PLAN FOR RECALLS ==

ADMINISTRATION

1. Apply all patches
2. Run database updates, update schema files and confirm everything applies cleanly
3. Run tests and confirm everything passes:
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Stats.t
t/db_dependent/Circulation/CalcFine.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Patron.t
t/db_dependent/XSLT.t
t/db_dependent/Search.t
t/db_dependent/Holds.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/Circulation.t

4. Go to Administration -> system preferences. Find the UseRecalls system preference. It should be DISABLED. Confirm RecallsMaxPickUpDelay is set to 7 by default.
5. Go to Administration -> circulation rules. Confirm there are no recalls circulation rules showing.
6. Test a few circulation flows: checking out, placing a reserve, checking in, fulfilling a reserve, etc. Confirm everything works as normal.

7. Go to Administration -> system preferences. Enable the UseRecalls system preference.
8. Go to Administration -> circulation rules. Set the following rules:
Recalls allowed (count) = 0
Recalls per record (count) = 0
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If any unavailable
Recall due date interval (days) = 3
Recall overdue fine amount = (something different to your normal fine amount)
Recall pickup period (days) = 1

Throughout your testing, try with different combinations of these rules and itemtype / branchcode / categorycode. Also try with null values. Keep the circulation rules open in another tab so you can refer to and update these easily. You should also have at least one other tab open for the staff client, and a third tab open for the OPAC, for ease of testing.

9. Go to your account -> More -> Set permissions. Confirm the recalls permission is checked.
10. Set up a test user with OPAC login details (Borrower A). This could also be your own user, as long as you have OPAC login access.
11. Set up a test record (Biblio A) with at least two items (Item A and Item B) of the same item type (or an item type with the same recall circ rules).

PLACING A RECALL

12. Log in to the OPAC as Borrower A. Do a catalogue search with a term that will return multiple results, including Biblio A.
13. Click on Biblio A.
14. Notice there is a 'Place recall' button on the sidebar menu. Click this button. There will be a message saying that there are no items to recall - this is because all items are available.

15. Check out Item A to another borrower (Borrower B).
16. Refresh the 'Place recall' page. You will still NOT be able to place a recall - this is because Recalls allowed = 0 and Recalls per record = 0.

17. Edit the circulation rules to have the following values:
Recalls allowed (count) = 1
Recalls per record (count) = 1
18. Refresh the 'Place recall' page. You will now see the form to place a recall.

BIBLIO-LEVEL RECALL, NO TRANSFER

19. Place a biblio-level recall.
Pickup location: Branch A, the set branch when you are logged into the staff client
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm
20. Confirm the recall is placed successfully. Confirm that the new due date displayed is correctly calculated to be today's date, plus 3 days (taken from the 'recall due date interval' circ rule)
21. In the staff client, look at Borrower B's account, and go to their Notices tab. Confirm they have received a 'Notification to return recalled item' notice.
22. Look at Borrower B's checkouts table. Notice the due date for their checkout has been adjusted, and there is now a note to say that the item was recalled and the due date adjusted.
23. Log in to the OPAC as Borrower B and go to your summary tab. Notice there is a note under their checkout to say the item had been recalled.

24. Log out of the OPAC and log back in as Borrower A.
25. Go to your summary tab. Confirm there is a Recalls tab with a count of 1.
26. Cancel the recall using the button. Confirm it cancels and the Recalls tab disappears.

27. Do a catalogue search with a term that will return multiple results, including Biblio A.
28. When the results load, notice there is a 'Place recall' button next to the 'Place hold' button. Click this 'Place recall' button.
29. Notice you are redirected straight to the form to place a recall.
30. Place a biblio-level recall again, following the steps in Step 19.

31. Go to your recalls history tab. Notice your first cancelled recall shows here.
32. Cancel the recall you just created, using the button. Confirm it cancels and you are redirected to your summary tab.

33. In the staff client, enable the UseCourseReserves system preference.
34. Go to the main menu, click Course Reserves.
35. Add a new course. (You may also have to define an authorised value for DEPARTMENT.)
36. Add Item A as a reserve to this course.

37. View Course Reserves in the OPAC. Click the course you just created.
38. Notice the reserve has a Recall button underneath it's 'Checked out' status. Click this button.
39. Place a biblio-level recall again, following the steps in Step 19.

40. Click the 'Place recall' link in the breadcrumbs.
41. Notice there is a message saying that you have reached the max number of recalls on this record. This is because Recalls allowed = 1 and Recalls per record = 1.
42. Edit the circulation rules to have the following values:
Recalls allowed (count) = 10
Recalls per record (count) = 5
43. Refresh the 'Place recall' page. You will now see the form to place a recall.

44. Create another test record (Biblio B) with at least one item (Item C).
45. Find this record on the OPAC and place a biblio-level recall again, following the steps in Step 19.

46. In the staff client, go to Circulation -> Old recalls. You should be able to see your two cancelled recalls.
47. Go to Circulation -> Recalls queue. Your current recalls should show here.
48. Use the 'Select all' checkbox to select all recalls.
49. Cancel the recalls using the 'Cancel selected recalls' button.

50. Go to the OPAC and place a biblio-level recall on Biblio A again, following the steps in Step 19.

51. In the staff client, check in Item A, which should still be checked out to Borrower B.
52. A box should pop-up asking you to confirm Borrower A's recall. Click ignore.
53. Click the link to go view Biblio A's details in the catalogue.
54. Click the recalls tab. Notice Borrower A's recall is displayed, and shows it is still Requested (has not been confirmed waiting).

55. Check in Item A again. This time, confirm the recall as waiting using the "Confirm recall" button.
56. Go to Borrower A's Notices tab. Confirm there is a notice "Recalled item awaiting pickup".
57. Go to Borrower A's checkouts. Notice there is a recalls tab. Confirm the recall is showing as "Ready for pickup".
58. Click the 'Actions' dropdown. Click the "Revert waiting" button. The page should show a message that the waiting status has been reverted, without reloading.

59. This time, check in Item B. The recall confirmation box should show again, because this a biblio-level recall that any recallable item under Biblio A can fill. Click the "Print slip and confirm" button.
60. Check the slip that is generated. Confirm it contains Borrower A's correct details, and the details of the recall are correct.
61. Go to Circulation -> Recalls awaiting pickup. Confirm the recall is now waiting and shows in this list.
(You could also try this with Item B having a different item type to Item A, and circ rules not allowing Item B's item type to have recalls. When checking in Item A, it should not trigger the recall box).

62. Go to Borrower A's checkouts. Check out Item B.
63. Confirm the checkout is successful and the recall is removed from the Recalls tab.
64. Go to Circulation -> Old recalls. The fulfilled recall should show.

65. Check in Item B.

BIBLIO-LEVEL RECALL, TRANSFER REQUIRED

66. Check out Item A to Borrower B.
67. Log in to the OPAC as Borrower A.
68. Find Biblio A and place a biblio-level recall.
Pickup location: Branch B, a different branch from your logged in branch. This recall will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall next available item'
Click confirm

69. In the staff client, check in Item A at Branch A. Notice the box that pops up shows that a transfer is required.
70. Click "confirm recall and transfer" and confirm the transfer.
71. Go to your account and click the Recalls tab.
72. Confirm the recall status now shows the item is in transit to Branch B.
73. In the drop-down top-right of your window, select 'Set library'.
74. Set your library to Branch B.

75. Go to Circulation -> Transfers to receive. Notice that the recall is showing here.
76. Click 'Cancel transfer'.
77. Go to Circulation -> Recalls queue
78. Confirm the recall status has been reverted to Requested.

79. Set your library back to Branch A.
80. Check in Item A and trigger the transfer.
81. Set your library back to Branch B.

82. Check in Item A at Branch B.
83. When the 'Recall found' box pops up, click Ignore.
84. Go to Circulation -> Recalls to pull. The recall should show here, with a button to "Cancel recall and return to: Branch A"
85. Click the button to cancel the recall.

86. Repeat Steps 66-70.
87. Check in Item A at Branch B. Confirm the recall as waiting.
88. Check out Item A to Borrower A to fulfill the recall.

89. Set your library back to Branch A and check in Item A.

ITEM-LEVEL RECALL, NO TRANSFER

90. Go to Administration -> circulation rules. Set the following rules:
On shelf recalls allowed ( If any unavailable / If all unavailable ) = If all unavailable

91. Check out Item A to Borrower B.
92. Log in to the OPAC as Borrower A and go to Biblio A.
93. Click the 'Place recall' button. Confirm there is a message that there are no items to recall. This is because On shelf recalls allowed = If all unavailable, and there is still one item (Item B) available.
94. In the staff client, edit Item B to have a withdrawn, item lost or not for loan status.
95. Refresh the 'Place recall' page. Confirm you can now see the form to place a recall.

96. Place an item-level recall.
Pickup location: Branch A.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm

97. In the staff client, edit Item B and remove the lost or missing status.
98. Check in Item B. Confirm the recall box does not pop up, because it cannot fill the item-level recall.
99. Check in Item A. Confirm the recall as waiting.
100. Go to Circulation -> Recalls awaiting pickup
101. Expire the recall. Confirm it expires as expected.

ITEM-LEVEL RECALL, TRANSFER REQUIRED

102. Repeat steps 91 to 95.
103. Place an item-level recall.
Pickup location: Branch B, we will require a transfer.
Recall not needed after (expiration date): whatever you want
Select 'recall a specific item'
Item B will not be selectable, and Item A should be selected by default.
Click confirm
104. In the staff client, check in Item A. Confirm the recall and trigger the transfer.
105. Set your library to Branch B and check in Item A.
106. Confirm the recall as waiting.
107. Check out Item A to Borrower A and fulfill the recall.

108. Set your library back to Branch A and check in Item A.

CRONJOBS: EXPIRING RECALL

109. Check out Item A to Borrower B.
110. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
111. In your terminal, enter mysql and edit the expiration date of your recall to be before today
UPDATE recalls SET expirationdate = NOW()-2 WHERE recall_id = X;
112. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
113. Go to Borrower A's account and go to the Recalls history tab
114. Confirm the recall has been expired because the current date surpassed the specified expiration date

115. Check out Item A to Borrower B.
116. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
117. In the staff client, check in Item A and confirm the recall as waiting.
118. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW() - interval 5 day WHERE recall_id = X;
119. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
120. Go to Borrower A's account and go to the Recalls history tab
121. Confirm the recall has been expired because the recall had been waiting for more days than the Recall pickup period

122. Go to Administration -> circulation rules. Set the following rules:
Recall pickup period (days) = 0
123. Set the RecallsMaxPickUpDelay system preference = 1.
124. Check out Item A to Borrower B.
125. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
126. In the staff client, check in Item A and confirm the recall as waiting.
127. In your terminal, enter mysql and edit the waiting date of your recall to be before today
UPDATE recalls SET waitingdate = NOW()-2 WHERE recall_id = X;
128. Run the expiry cronjob from within your shell
perl misc/cronjobs/recalls/expire_recalls.pl
129. Go to Borrower A's account and go to the Recalls history tab
130. Confirm the recall has been expired because the recall had been waiting for more days than the RecallsMaxPickUpDelay syspref

CRONJOBS: OVERDUE RECALL

131. Check out Item A to Borrower B
132. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
133. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
134. Run the overdue cronjob from within your shell
perl misc/cronjobs/recall/overdue_recalls.pl
135. Go to Circulation -> Overdue recalls
136. Confirm your recall is showing here now as the recall has been marked Overdue

CIRCULATION

137. Check in Item A.
138. When the recall box pops up, click Ignore.
139. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that another borrower has recalled the item you are trying to check out.
140. Click "No don't check out" and confirm the item isn't checked out and the recall remains.
141. Repeat Step 139.
142. Click "Yes check out" and confirm the item is checked out and the recall remains.
143. When Borrower B's checkout table loads, confirm that you cannot renew or check in the item from the Checkouts table because there is a 'Recalled' link which takes you to the recalls tab for that biblio.
144. Repeat Steps 137-139.
145. Select "Cancel recall" and click "Yes check out" and confirm the item is checked out and the recall has been cancelled.
146. Log in to the OPAC as Borrower A. Place a recall (any level) on Biblio A.
147. Check in Item A. Confirm the recall as waiting.
148. Check out Item A to Borrower B. You should see a yellow confirmation box, saying that that another borrower has recalled the item that you are trying to check out.
149. Select "Revert waiting status" and click "Yes check out" and confirm the item is checked out and the recall status has reverted to requested.

OTHER
150. In your terminal, enter mysql and edit the due date of the checkout to Borrower B to be before today
UPDATE issues SET date_due = NOW()-2 WHERE issue_id = X;
151. Go to Borrower A's recalls and click the Actions dropdown.
152. Click "Mark as overdue" and confirm the recall is marked as overdue manually.

153. Go to Tools -> Log Viewer. Check only the Recalls module, and leave all other parameters, and click Submit.
154. Confirm all of the recalls actions that have been made are correctly logged.

Note: recalls messaging preferences are introduced in Bug 23781.
The recall feature is fully documented at: https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 869 Marcel de Rooy 2022-03-02 15:52:58 UTC
Created attachment 131270 [details] [review]
Bug 19532: (follow-up) aria-hidden attr on OPAC, and more

- removing authnotrequired flag from scripts
- fixing opac buttons
- chmod +x for recalls test files

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 870 Marcel de Rooy 2022-03-02 15:53:15 UTC
Created attachment 131271 [details] [review]
Bug 19532: (follow-up) Fixing failing CalcFine.t test

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 871 Marcel de Rooy 2022-03-02 15:53:30 UTC
Created attachment 131272 [details] [review]
Bug 19532: (follow-up) Fixing OPAC display and staff client errors

- fixes the displays of opac-recalls.pl and opac-recall.pl
- fix the error on Recalls to pull page
- fix JS error preventing Recalled link from showing in checkouts table
- fix cancelling of recall when checking out item

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 872 Marcel de Rooy 2022-03-02 15:53:44 UTC
Created attachment 131273 [details] [review]
Bug 19532: (follow-up) Fix undef recall_id preventing fulfillment of recall

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 873 Marcel de Rooy 2022-03-02 15:53:57 UTC
Created attachment 131274 [details] [review]
Bug 19532: (follow-up) Fixing tests and QA tools

And making reverted ajax message clearer

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 874 Marcel de Rooy 2022-03-02 15:54:12 UTC
Created attachment 131275 [details] [review]
Bug 19532: (follow-up) Fix calls, tests, syspref settings, checks

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 875 Marcel de Rooy 2022-03-02 15:54:26 UTC
Created attachment 131276 [details] [review]
Bug 19532: (QA follow-up) Enable XSLT statuses translation

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 876 Marcel de Rooy 2022-03-02 15:54:39 UTC
Created attachment 131277 [details] [review]
Bug 19532: (follow-up) Fixes along recall workflow

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 877 Marcel de Rooy 2022-03-02 15:54:53 UTC
Created attachment 131278 [details] [review]
Bug 19532: (QA follow-up) Fixing unit tests

(Trivial:) Number of tests in Koha/Item.t
Added a $patron object to resolve warnings like:
* Global symbol "$patron" requires explicit package name (did you forget to declare "my $patron"?) at t/db_dependent/Koha/Patron.t line 1064.
Fixed CanItemBeReserved call in Holds.t, number of tests adjusted

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 878 Marcel de Rooy 2022-03-02 15:55:07 UTC
Created attachment 131279 [details] [review]
Bug 19532: (follow-up) Fix for wantarray change and title-string

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 879 Marcel de Rooy 2022-03-02 15:55:21 UTC
Created attachment 131280 [details] [review]
Bug 19532: (QA follow-up) Fix few Koha::Recalls->search occurrences

Due to the wantarray change, we should fix this call in list context.
We should either use an iterator now or append as_list.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 880 Marcel de Rooy 2022-03-02 15:55:35 UTC
Created attachment 131281 [details] [review]
Bug 19532: (QA follow-up) Fix fine calculation by inserting biblionumber

The fines cron job uses Getoverdues to pass issue info to CalcFine.
It took me a while to realize that the overdue hash does not contain
a biblionumber. When testing CalcFine, we pass an item hash that
does include one.

So what happened? $item->{biblionumber} is undefined when it comes from
Getoverdues and no recall overdue fine is calculated, only a regular one.

Simple fix (without any impact): Add a biblionumber to Getoverdues.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Tested with fines.pl: recall fine applied now.
Ran some Circulation and Overdues unit tests.
Comment 881 Marcel de Rooy 2022-03-02 15:55:48 UTC
Created attachment 131282 [details] [review]
Bug 19532: (QA follow-up) Move as_list to iterator based loop

Adjusting both new cron jobs.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 882 Marcel de Rooy 2022-03-02 15:57:29 UTC
Aleisha: Note that I added an extra patch in the beginning too to extract DBIx stuff out of a regular patch.
Comment 883 Aleisha Amohia 2022-03-02 19:39:23 UTC
It's looking good Marcel! Thanks for your help.
Comment 884 Marcel de Rooy 2022-03-03 15:09:33 UTC
Created attachment 131330 [details] [review]
Bug 19532: (QA follow-up) Add the cron jobs to the cron files

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 885 Marcel de Rooy 2022-03-03 15:31:16 UTC
I hope to finish up tomorrow which actually does not mean that I could QA this huge patch set just on my own [impossible; see earlier comments], but I have spent a considerable amount of time on it and my time is limited too. It looks quite good to me considering elapsed time etc. And yes, there is a serious overlap with holds and code doing similar things. But thinking about that, the alternative of injecting this into holds might be even worse.

So I would welcome the other people that stepped forward to help, to especially test things in the coming week. (David or Katrin, feel free to switch to Signed Off.)
Based on their findings, I would propose to pass QA on Friday 11. And let Fridolin push it soon after that. Allowing all to find the remaining bugs ;)
What do you think?
Comment 886 Aleisha Amohia 2022-03-03 20:15:29 UTC
Thanks Marcel, I appreciate you helping me get this over the line. If there are bits I can look at, let me know, I have a bit of capacity at the moment.

Pass QA on Friday 11 sounds like a great plan to me. Any additional QA team help in between would be awesome!
Comment 887 Marcel de Rooy 2022-03-04 09:52:59 UTC
Still posting two observations from a functional view without any need to address them here btw.

Functionally, it is a bit confusing that the recall overdue fine amount is so close in the interface to the number of recalls allowed, due date interval, etc. Because it is actually a fine that will not be placed on the person doing the recall but on the patron that loaned the book (and might be in another patron category). So when you enable recalls for a category and you want to have a non-regular overdue fine, you should fill all recall fines on the other categories as well. Maybe something for documentation ?

Another functional remark is that the recalls feature currently does not support policies like we have for holds (e.g. you cannot place recalls on items of another branch etc.). Certainly not meant as a blocker at this moment. But I feel that the need to refine circulation rules at that level will be felt soon by multiple branch libraries. You cannot really introduce recalls for one branch now, since the members of that branch can place recalls on books of the other branches. This may need further thought on follow-up reports.
Comment 888 Marcel de Rooy 2022-03-04 09:54:55 UTC
Final comment for now. 

Aleisha has done a really amazing job in keeping this development alive from 2017 onwards. It is a very brave effort on itself to insert this feature into Koha's circulation core; we know that the existing code with all its holds preferences and policies is a minefield. What I saw, looks good and connects with Koha coding practices within the last 5 years. An important step that still needs to be made, is REST API support on follow-up reports. As to functionality, a lot of things have been said and can be said. But this provides us a good base to build and improve further.
Comment 889 Aleisha Amohia 2022-03-10 22:34:28 UTC
Today is Pass QA Day! What do I need to do to satisfy the QA team?
Comment 890 Marcel de Rooy 2022-03-11 07:11:09 UTC
(In reply to Aleisha Amohia from comment #889)
> Today is Pass QA Day! What do I need to do to satisfy the QA team?

As promised, I am going to pass QA now on this patch set. See former comments.
We did not receive any visible responses from QA team or others that stepped in to help, so that should be a positive sign also: no problems encountered.

The diligent work of David Nind still counts as a signoff. The attention of Katrin, Victor and myself counts for a QA stamp.
Fridolin: go ahead now and don't wait too long !
Comment 891 Katrin Fischer 2022-03-11 08:32:30 UTC
Late to the party (as always) :) 

I am sorry I didn't get to spend time on this as promised last week, we are in the middle of a big migration and brain power is limited. But I trust Marcel's dilligent QA work on this and am sure that we can fix any issues that might turn up on separate bugs once the ground work has gone in.
Comment 892 Tomás Cohen Arazi 2022-03-11 15:19:31 UTC
Looking here. Will propose some small changes and file follow-up bugs for remaining concerns so this can finally get pushed and worked through.
Comment 893 Tomás Cohen Arazi 2022-03-11 19:56:08 UTC
Created attachment 131629 [details] [review]
Bug 19532: (QA follow-up) Better relationship names

This patch makes the relationship names be ready for future API
developments for recalls, by making their names match the method names.

To test:
1. Apply this patch
2. Run the tests
=> SUCCESS: No change
3. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 894 Tomás Cohen Arazi 2022-03-11 19:56:25 UTC
Created attachment 131630 [details] [review]
Bug 19532: Make recalls.status an ENUM

This patch makes the status attribute an ENUM, setting the default value
as 'requested' as well. The chosen names are easier to read than single
letters. Also, renamed F into fulfilled (this impacts methods names as
well). This is because 'finished' or 'completed' is more a synonym for
old => 1...
Comment 895 Tomás Cohen Arazi 2022-03-11 19:56:41 UTC
Created attachment 131631 [details] [review]
Bug 19532: (QA follow-up) Simplify resultset accessors

This patch makes the different ->recalls accessors implemented on this
bug be more standard. This means:
- They don't do special things like default sorting or stripping out
  special parameters. That's all left to the caller and the methods are
  clean: they just return the related objects
- Useful filtering methods for Koha::Recalls resultsets are added. The
  only used one (in the end) was ->filter_by_current. It seems like a
  better approach, because it gives devs more control on how they want
  to chain things, and there's a single place in which to maintain the
  criteria of what is 'current' or 'finished'. This clearly makes the
  'old' column obsolete IMHO, at least in the use cases I found. This is
  covered by tests as well.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 896 Tomás Cohen Arazi 2022-03-11 20:00:11 UTC
Ok, I added my two cents. Some doubts remain for me:

- Shouldn't we have the checkout_id link to the issues table? It seems to me that Koha::Recall->checkout is trying to guess something we know when the recall is generated. Or maybe it is just that I'm not understanding the biblio-level recall workflow/use case.
- I'd remove the 'old' attribute.
- Column names... If we are introducing a new table, I suggest we do better there. See bug 25260 for column names...

Couldn't finish testing, but wanted to leave my notes.
Comment 897 Aleisha Amohia 2022-03-13 20:07:10 UTC
Thanks for your thoughts Tomas but respectfully we had already agreed to Pass QA and get this pushed so we can continue the work on follow-ups. It's because of extra thoughts like this that our work here has been blocked continuously since 2017 :) Can you please make some follow-up bugs for your comments so that this can get pushed?
Comment 898 Katrin Fischer 2022-03-13 22:12:22 UTC
I've been wondering too if it might be better to move Tomas' patches to separate bugs and work on them there. 

I'd feel more comfortable with that approach as some of the patches like the second follow-up for the ENUM touch a lot of the code. It all looks good, but some things like the change to update_dbix_class_files.pl I was wondering about (but don't want to add to the almost 900 comments here)

As the ENUM patch already includes an atomic update file it should be really just a matter of moving them without having to change the patches themselves.

I think it will keep us from having to do more rebases that can also create issues on big patch sets and then take on any further enhancements incrementally.
Comment 899 Aleisha Amohia 2022-03-13 22:17:23 UTC
Sounds good to me.
Comment 900 Tomás Cohen Arazi 2022-03-13 23:35:24 UTC
(In reply to Aleisha Amohia from comment #897)
> Thanks for your thoughts Tomas but respectfully we had already agreed to
> Pass QA and get this pushed so we can continue the work on follow-ups. It's
> because of extra thoughts like this that our work here has been blocked
> continuously since 2017 :) Can you please make some follow-up bugs for your
> comments so that this can get pushed?

Hi, I wasn't aware of any decision about this bug (my fault). Just saw Marcel did a QA effort and wanted to help. My feeling was that, besides functionality debate, some things should be pushed together, hence why I spent some hours trying to tidy things for future enhancements.

I can certainly do it on separate bugs.
Comment 901 Tomás Cohen Arazi 2022-03-14 00:09:28 UTC
(In reply to Tomás Cohen Arazi from comment #900)
> functionality debate, some things should be pushed together

Renaming the column names, for example.
Comment 902 Fridolin Somers 2022-03-14 01:45:52 UTC
Tomas changes makes sens, I've started validating with them.
Found a few trivial fixes.

misc/devel/update_dbix_class_files.pl change my $force = 1
This must be a mistake.
I can accept such a change in this bug.
I will revert when pushing.
Comment 903 Tomás Cohen Arazi 2022-03-14 01:47:21 UTC
(In reply to Fridolin Somers from comment #902)
> Tomas changes makes sens, I've started validating with them.
> Found a few trivial fixes.
> 
> misc/devel/update_dbix_class_files.pl change my $force = 1
> This must be a mistake.
> I can accept such a change in this bug.
> I will revert when pushing.

Remove it inline.
Comment 904 Marcel de Rooy 2022-03-14 14:27:16 UTC
 Koha/Biblio.pm               |  2 +-
 Koha/Recall.pm               | 18 +++++++++++-------
 Koha/Schema/Result/Recall.pm |  4 ++--

Dont do this Tomas
Comment 905 Tomás Cohen Arazi 2022-03-14 16:16:11 UTC
Created attachment 131664 [details] [review]
Bug 19532: Make recalls.status an ENUM

This patch makes the status attribute an ENUM, setting the default value
as 'requested' as well. The chosen names are easier to read than single
letters. Also, renamed F into fulfilled (this impacts methods names as
well). This is because 'finished' or 'completed' is more a synonym for
old => 1...

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 906 Tomás Cohen Arazi 2022-03-14 16:16:38 UTC
Created attachment 131665 [details] [review]
Bug 19532: (QA follow-up) Simplify resultset accessors

This patch makes the different ->recalls accessors implemented on this
bug be more standard. This means:
- They don't do special things like default sorting or stripping out
  special parameters. That's all left to the caller and the methods are
  clean: they just return the related objects
- Useful filtering methods for Koha::Recalls resultsets are added. The
  only used one (in the end) was ->filter_by_current. It seems like a
  better approach, because it gives devs more control on how they want
  to chain things, and there's a single place in which to maintain the
  criteria of what is 'current' or 'finished'. This clearly makes the
  'old' column obsolete IMHO, at least in the use cases I found. This is
  covered by tests as well.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 907 Tomás Cohen Arazi 2022-03-14 16:17:03 UTC
Created attachment 131666 [details] [review]
Bug 19532: (QA follow-up) POD and import fixes

This fixes some library imports and POD.

To test:
1. Apply this patch
2. Run the tests
=> SUCCESS: No change
3. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 908 Tomás Cohen Arazi 2022-03-14 17:39:18 UTC
Ok, I removed the schema updates and hence the force=1 I added by mistake. This will need to be done by the RM as usual.

I also removed the changes to the relationship names...
Comment 909 Aleisha Amohia 2022-03-15 02:17:47 UTC
Created attachment 131701 [details] [review]
Bug 19532: (QA follow-up) Fixing typo

Introduced by: Bug 19532: (QA follow-up) Simplify resultset accessors
Comment 910 Fridolin Somers 2022-03-15 10:33:57 UTC
Pushed to master for 22.05, thanks to everybody involved 🦄
Comment 911 Fridolin Somers 2022-03-15 10:39:13 UTC
Here it is !!!

I've added several patches during push :

975f52a4cf Bug 19532: (RM follow-up) Fix recalls.old is default 0
a0a72c9653 Bug 19532: (RM follow-up) More use of system preference
3838ac82f2 Bug 19532: (RM follow-up) Adapt also UNIMARC XSLT
b2dc45a47d Bug 19532: (RM follow-up) Fix status finished renamed fulfilled
9cb2ff97d2 Bug 19532: DBRev 21.12.00.018
0e35ab911c Bug 19532: (RM follow-up) Update DBIC Schema

Mainly more use of system preference in order to avoid impact on installs not using this feature.
Also one can imagine turning it on, playing with some recalls, turning it off.
We must avoid fetching DB datas when it is off.

Also recalls.old has been changed in "Make recalls.status an ENUM" to 0/1 boolean instead of undef/1.
This makes sens, it is this way in several other places.

Great thanks to all for your work and energy.

This may be 22.05 must-have feature ;)
Comment 912 Fridolin Somers 2022-03-15 10:43:03 UTC
Some wiki pages need to be adapted, like :
https://wiki.koha-community.org/wiki/Catalyst_IT_Recalls#Statuses
Comment 913 Jonathan Druart 2022-03-15 10:47:38 UTC
About the "old" column, on bug 20271 we decided (after a long discussion) to use "is_current".
Comment 914 Tomás Cohen Arazi 2022-03-15 10:50:56 UTC
(In reply to Jonathan Druart from comment #913)
> About the "old" column, on bug 20271 we decided (after a long discussion) to
> use "is_current".

I propose to just remove it as part of revisiting the column names. That's why I added filter_by_current and filter_by_finished. But that's swinging to discuss on another bug.
Comment 915 Jonathan Druart 2022-03-15 10:53:44 UTC
Also, new notice templates should use the TT syntax. I was sure we agreed on that but I didn't find a coding guidelines however.
Comment 916 Aleisha Amohia 2022-03-15 19:41:59 UTC
Exciting! Thanks everyone for your help.
Comment 917 Fridolin Somers 2022-03-15 21:09:04 UTC
Ah some recalls tests are failing in D9 :
https://jenkins.koha-community.org/view/master/job/Koha_Master_D9/1896/
Comment 918 Tomás Cohen Arazi 2022-03-15 21:11:30 UTC
(In reply to Fridolin Somers from comment #917)
> Ah some recalls tests are failing in D9 :
> https://jenkins.koha-community.org/view/master/job/Koha_Master_D9/1896/

Random failures due to server load (i.e. there's a one second difference)
Comment 919 Fridolin Somers 2022-03-18 06:11:23 UTC
Failures appears on several runs :
https://jenkins.koha-community.org/view/master/job/Koha_Master_U21/115/

I think it comes from DT comparison :

my $expected_due_date = dt_from_string->add( days => 3 );
is( dt_from_string( $recall->checkout->date_due ), $expected_due_date, "Checkout due date has correctly been extended by recall_due_date_interval days" );
is( $due_date, $expected_due_date, "Due date correctly returned" );

$recall->checkout->date_due is a date in ISO string, compare to a DateTime object.

How is it in other places ?
Comment 920 Jonathan Druart 2022-03-18 08:29:53 UTC
(In reply to Fridolin Somers from comment #919)
> Failures appears on several runs :
> https://jenkins.koha-community.org/view/master/job/Koha_Master_U21/115/
> 
> I think it comes from DT comparison :
> 
> my $expected_due_date = dt_from_string->add( days => 3 );
> is( dt_from_string( $recall->checkout->date_due ), $expected_due_date,
> "Checkout due date has correctly been extended by recall_due_date_interval
> days" );
> is( $due_date, $expected_due_date, "Due date correctly returned" );
> 
> $recall->checkout->date_due is a date in ISO string, compare to a DateTime
> object.
> 
> How is it in other places ?

The error is:
23:08:40 koha_1       | #          got: '2022-03-20T22:08:39'
23:13:07 koha_1       | #     expected: '2022-03-20T22:08:40'

You need to compare dates using t::lib::Dates::compare
Comment 921 Fridolin Somers 2022-03-18 08:56:25 UTC
Ah super, thanks a lot.

I've pushed a fix on test suite to master :
Bug 19532: (RM follow-up) Fix dates compare in recalls tests
Comment 922 Fridolin Somers 2022-03-23 20:06:27 UTC
Arf DBIx schema is not correct on recalls.old.

Pushed to master :
Bug 19532: (RM follow-up) Fix DBIx schema on old

I've controled also on an install with v21.11.00 + updatedatabase.
No differences in generated DBIx schema.
Comment 923 Arthur Suzuki 2022-03-28 13:52:16 UTC
Created attachment 132332 [details] [review]
fix installation data for Unimarc

fixed installation data for unimarc
Comment 924 Fridolin Somers 2022-03-28 14:04:41 UTC
Patch "fix installation data for Unimarc" pushed to master
Comment 925 Jonathan Druart 2022-06-02 09:02:04 UTC
Two critical bugs found in the last day: bug 30876 and bug 30885.
They make the feature unusable. Please provide a patch for bug 30885.
Comment 926 Jonathan Druart 2022-10-14 07:07:53 UTC
From misc/cronjobs/recalls/expire_recalls.pl and misc/cronjobs/recalls/overdue_recalls.pl:

+BEGIN {
+    # find Koha's Perl modules
+    # test carefully before changing this
+    use FindBin;
+    eval { require "$FindBin::Bin/../kohalib.pl" };
+}

Since bug 28617 you should not do that anymore.
Comment 927 Katrin Fischer 2022-11-14 22:27:00 UTC
(In reply to Jonathan Druart from comment #926)
> From misc/cronjobs/recalls/expire_recalls.pl and
> misc/cronjobs/recalls/overdue_recalls.pl:
> 
> +BEGIN {
> +    # find Koha's Perl modules
> +    # test carefully before changing this
> +    use FindBin;
> +    eval { require "$FindBin::Bin/../kohalib.pl" };
> +}
> 
> Since bug 28617 you should not do that anymore.

Moved to a new bug:
Bug 32202 - Remove kohalib.pl from recall cronjobs
Comment 928 Jonathan Druart 2023-01-04 08:08:45 UTC
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-course-details.tt

-                                        <td>[% INCLUDE 'item-status.inc' item=cr.item issue=cr.issue %]</td>
+                                        <td>[% INCLUDE 'item-status.inc' item=cr.course_item issue=cr.issue %]</td>

I don't understand this change, and I am going to revert it. I think it broke the availability display. Can you clarify on bug 32445 please?
Comment 929 Aleisha Amohia 2023-01-08 20:34:10 UTC
(In reply to Jonathan Druart from comment #928)
> koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-course-details.tt
> 
> -                                        <td>[% INCLUDE 'item-status.inc'
> item=cr.item issue=cr.issue %]</td>
> +                                        <td>[% INCLUDE 'item-status.inc'
> item=cr.course_item issue=cr.issue %]</td>
> 
> I don't understand this change, and I am going to revert it. I think it
> broke the availability display. Can you clarify on bug 32445 please?

Likely leftover from old upstream requirements. Your fix on Bug 32445 is good.
Comment 930 Jonathan Druart 2024-01-12 10:29:24 UTC
Regarding circulation rules: "Holds allowed (total)" vs "Recalls allowed (total)"

For holds an empty value means unlimited, for recalls it is "not allowed".

Is that expected to have two different behaviours for the same config of two very similar features?
Comment 931 Katrin Fischer 2024-01-12 11:12:08 UTC
(In reply to Jonathan Druart from comment #930)
> Regarding circulation rules: "Holds allowed (total)" vs "Recalls allowed
> (total)"
> 
> For holds an empty value means unlimited, for recalls it is "not allowed".
> 
> Is that expected to have two different behaviours for the same config of two
> very similar features?

I think it would be beneficial to make this consistent. The checkouts allowed also has empty = unlimited. So that seems to be the majority.