Post-go live recalls bugs fixes and enhancements

Fixing some bugs and adding some necessary enhancements post go-live, sponsored by Waikato Institute of Technology.
The following bugs have been fixed:
*added RecallsLog syspref and log recalls actions
*prevented reserves being placed on biblios that the user has already recalled
*took old recalls out of recalls queue and put in new 'old recalls' page
*confirmed recalls fines are calculated and accumulate
*set up recalls expiry and overdue cronjobs
*fulfill recalls if checking out the recalled item to the borrower, regardless of status
*fixed waiting confirmation pop-up when checking in a transfer recall
*added to statistics when a recall is requested
*prevented transfer pop-up when checking in an item at the pick-up location that has a different home location
*Revert recall status from in transit if cancelling transfer
=== Getting started ===
We need two borrowers (Borrower A and Borrower B) and a biblio (Biblio A) with one item (Item A). The item must have a home library of Branch A. We also need two branches (Branch A and Branch B). Borrower A should be YOU, as you'll be logging into the OPAC as this borrower.
Enable the AutomaticItemReturn and RecallsLog system preferences.
=== Test plan ===
#Check out Item A to Borrower B.
#Log in to the OPAC as Borrower A and navigate to Item A.
#Place a biblio-level recall on Item A with a pick-up location of Branch B.
#In another tab, open the recalls queue in the staff client (circ/recalls_queue.pl). Confirm the the recall is showing as Requested.
#Attempt to place a hold on Item A for Borrower A in the staff client. Confirm you cannot place the hold because a recall exists.
#Run the following SQL report to confirm that recall statistics are being collected: SELECT * FROM statistics WHERE type = 'recall';
#Check in Item A at Branch A (circ/returns.pl). Confirm the transfer. Check that the recall status is now in transit (circ/recalls_queue.pl).
#Check in Item A to Branch A again. Click the Cancel transfer button. Confirm that the recall status is back to being requested.
#Check in Item A to Branch A again and confirm the transfer.
#Set the current branch to Branch B (circ/selectbranchprinter.pl).
#Check in Item A at Branch B. A confirmation box should pop-up asking you to set the recall as waiting. Confirm waiting.
#Check out Item A to Borrower A and fulfill the recall.
#Set the current branch back to Branch A (circ/selectbranchprinter.pl).
#Open the old recalls queue (circ/recalls_old_queue.pl) and confirm that the completed recall shows.
#Check out Item A to Borrower B. You will be asked to check in and check out the item - confirm.
#Log in to the OPAC as Borrower A and place a recall on Item A.
#Check out Item A to Borrower A and confirm the checkout. Confirm the recall gets fulfilled.
#Check out Item A to Borrower B and confirm the checkout. 
#Edit Item A to have a home library of Branch B
#Log in to the OPAC as Borrower A and place a recall on Item A again.
#Check in Item A at Branch A and confirm the recall as waiting. Confirm there is NO popup to transfer Item A back to Branch B.
#View action logs and confirm there is a collection of logs related to a recalls module (tools/viewlog.pl)
====Testing crons====
We have added two cronjobs to handle expired and overdue recalls. These recalls run daily.
* Expiry: if a recall has been waiting for pickup longer than the 'recall pickup period' set in your circulation rules, it will be set as expired.
* Overdues: if a recall has been requested and the relevant checkout (which has had an adjusted due date, based on the 'recall due date interval' set in your circulation rules) becomes overdue, the recall will also be set as overdue (overdue to be returned).
To test (this will take four days of testing):
#Adjust your circulation rules for testing. Set 'recall pickup period' to 1 and 'recall due date interval' to 0 (Recall pickup period cannot be set to 0, otherwise it will default to using the system preference RecallsMaxPickUpDelay).
#Check out Item A to Borrower B
#Log in to the OPAC as Borrower A and place a recall on Item A
#Confirm that the due date for Borrower B's checkout is adjusted to be due today
#Tomorrow (Day 2), check that the Borrower B's checkout is now overdue. Check that the status for Borrower A's recall now says 'overdue to be returned'.
#Check in Item A. Confirm the item as waiting for Borrower A.
#The day AFTER tomorrow (Day 4), check that the recall for Borrower A has now been expired.
=== Other links ===
Go back to main recalls page