fetch it! a custom voyager service for holds/retrieval without using reporter
DESCRIPTION
A Custom Voyager service for Holds/Retrieval without using reporterTRANSCRIPT
FETCH IT!
A CUSTOM VOYAGER SERVICE FOR HOLDS/RETRIEVAL WITHOUT USING REPORTER
Ray Schwartz, Library Information Systems
Victoria Wagner, Lending Services
Cheng Library, William Paterson University
Wayne, NJ
PURPOSE
Library Goal: Exceed our users’ expectations.
Design a book paging service available 7 days a week whenever the Library is open.
PLANNING
Lending Services and Library Information Systems librarians met to discuss how to implement a paging service using Voyager and patron-initiated OPAC holds.
VOYAGER CUSTOMIZATION
In Sys Admin, Circulation, Policy Definitions, Patron Rules, we activated Place Holds Using the OPAC.
VOYAGER CUSTOMIZATION, CONTINUED
Sys Admin, Policy Definitions, Matrix, Patron/Item, Activate Hold in Settings
Sys Admin, Policy Definitions, Matrix, Patron/Item, Intervals, add Hold Shelf Life
VOYAGER CUSTOMIZATION, CONTINUED
Sys Admin, OPAC Configuration, Miscellaneous, we activated Allow On-Shelf OPAC Holds:
OPAC CUSTOMIZATION
We added a Fetch It! request link within each bibliographic record of circulating materials.
OPAC CUSTOMIZATION, CONTINUED
After requesting an item, patrons are reminded about the Fetch policies and are required to select a Pickup Location.
BEHIND THE SCENES:STAFF WORKFLOW
Lending Services staff check live query throughout the day and page requested materials.
Fetched items are discharged in Voyager. Requesting patron information is printed at
discharge. Items put on hold shelf for 5 days. Staff review hold shelf daily to remove
cancelled or non-collected hold requests.
BEHIND THE SCENES:REPORTS
Live query of Voyager displays current patron-initiated hold requests through OPAC.
Staff check query hourly and page materials throughout the day.
BEHIND THE SCENES:REPORTS, CONTINUED
Daily report of holds which includes cancelled holds – whether expired (never picked up from hold shelf) or cancelled by the patron – emailed to Lending Services staff for review.
Circjob 5 is scheduled to run 5x/day sending Item Available notices via email to patrons as materials are fetched. Lending Services staff members are copied on all emails.
BEHIND THE SCENESREPORTS, CONTINUED
Ray’s Discussion of Reports
How this was done
CircjobsHolds Notices script
Circjob 5Email notices to patron and staff
Holds Report scriptPerl script processes current holdsPerl script processes old holdsEmail reports to staff
Live Report On Demand
Circjobs running directly under Cron
5 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j16 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j27 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j38 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j49 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j611 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j712 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j810 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j2415 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j1916 0 * * 0-5 /m1/voyager/wmpatrsndb/sbin/Pcircjob -j26
# run circjob 5/m1/voyager/wmpatrsndb/sbin/Pcircjob -j5# rename outputmv /m1/voyager/wmpatrsndb/rpt/crcnotes.CircDesk.inp /m1/incoming/holds/crcnotes.CircDesk.inp
# extract holdsegrep ^01 /m1/incoming/holds/crcnotes.CircDesk.inp > /m1/incoming/holds/crcnotes.CircDesk.inp.holds
# extract all without holdsegrep -v ^01 /m1/incoming/holds/crcnotes.CircDesk.inp > /m1/incoming/holds/crcnotes.CircDesk.inp.woholds
# remove inp filerm /m1/incoming/holds/crcnotes.CircDesk.inp
# rename without holds file back to original filenamemv /m1/incoming/holds/crcnotes.CircDesk.inp.woholds /m1/voyager/wmpatrsndb/rpt/crcnotes.CircDesk.inp
Holds Notices Script – Part 1
Output of Circjob 5
1|97.2|[email protected]|00000|XXX|XX X||000 St|||||City|NJ|07470|US|2010000000|10/20/2014|David and Lorraine Cheng Library|Circulation Dept|Cheng Library Lending Services 973-720-3180|William Paterson University|300 Pompton Road|Wayne|NJ|07470|USA|973-720-3180|Scientist in the crib : minds, brains, and how children learn / Alison Gopnik, Andrew N. Meltzoff, Patricia K. Kuhl.|Gopnik, Alison.|33007007965144|BF311 .G627 1999||10/25/2014
split -1 /m1/incoming/holds/crcnotes.CircDesk.inp.holds
while ls -t x* do
FILE=`ls -t x* | head -n 1`EMAIL=`nawk 'FS="|" { print $3}' /m1/incoming/holds/$FILE`
sleep 2echo $MONTH/$DAY/$YEAR > mail1 echo " " >> mail1echo David and Lorraine Cheng Library >> mail1echo Circulation Dept >> mail1echo " " >> mail1nawk 'FS="|" { print "Dear "$6" "$5}' /m1/incoming/holds/$FILE >> mail1echo " " >> mail1nawk 'FS="|" { print "The item(s) that you requested are now available at the location(s) shown below until "$34}' /m1/incoming/holds/$FILE >> mail1echo LOCATION: Lending Services Desk >> mail1echo " " >> mail1nawk 'FS="|" { print "Title:\t\t"$29"\nAuthor:\t"$30"\nItem ID:\t"$31"\nCall No:\t\t"$32}' .../$FILE >> mail1mailx -s "Item Available Notice" -b [email protected] -c [email protected] [email protected] $EMAIL < mail1
mv $FILE oldfilsdoneexit
Holds Notices Script – Part 2
Holds Notices Script is run 5x a day via Cron
5 09 * * * /m1/incoming/holds/holdsnotices.ksh5 12 * * * /m1/incoming/holds/holdsnotices.ksh0 15 * * * /m1/incoming/holds/holdsnotices.ksh0 18 * * * /m1/incoming/holds/holdsnotices.ksh0 21 * * * /m1/incoming/holds/holdsnotices.ksh
From: Voyager Owner Sent: Tuesday, October 14, 2014 12:05 PMTo: xxxxxxxxxxx; Pruden, JillCc: Wagner, VictoriaSubject: Item Available Notice
10/14/2014David and Lorraine Cheng LibraryCirculation Dept Dear xxxxxxxxxxxxx The item(s) that you requested are now available at the location(s) shown below until 10/19/2014LOCATION: Lending Services Desk Title: Fierce yellow pumpkin / story by Margaret Wise Brown ; pictures by Richard Egielski.Author: Brown, Margaret Wise, 1910-1952.Item ID: 33007008612455Call No: P J Bro
Reports
Holds Report scriptl Perl script processes current holdsl Perl script processes old holdsl Email reports to staff
lLive Report On Demand - Coldfusion
Perl Scriptsholds-current.pl
Reports from HOLD_RECALL tableholds-old.pl
Reports from HOLD_RECALL_ARCHIVE table
Holds Report Script – Part 1
/m1/shared/bin/perl /m1/incoming/holds/holds-current.pl
# Process current lending holds
grep '|Cancelled|' holds-currentL.txt > holds-oldtempL.txtgrep '|Expired|' holds-currentL.txt >> holds-oldtempL.txtgrep -v '|Cancelled|' holds-currentL.txt > holds-curtemp.txtgrep -v '|Expired|' holds-curtemp.txt > holds-curtemp2.txt
sed "s/\|/\"\,\"/g" /m1/incoming/holds/holds-curtemp2.txt > /m1/incoming/holds/holds-current1.txtsed "s/^/\"/g" /m1/incoming/holds/holds-current1.txt > /m1/incoming/holds/holds-current2.txtsed "s/$/\"/g" /m1/incoming/holds/holds-current2.txt > /m1/incoming/holds/holds-current3L.txt
Holds Report Script – Part 2
/m1/shared/bin/perl /m1/incoming/holds/holds-old.pl
# Process old lending holds and adding old holds extracted from current file
nawk 'FS="|" {print $1"||"$5"|"$6"|"$7"||"$11"|"$8"|"$9"|"$12"|"$13}' holds-oldtempL.txt >> holds-oldL.txt
sed "s/\|/\"\,\"/g" /m1/incoming/holds/holds-oldL.txt > /m1/incoming/holds/holds-old1.txtsed "s/^/\"/g" /m1/incoming/holds/holds-old1.txt > /m1/incoming/holds/holds-old2.txtsed "s/$/\"/g" /m1/incoming/holds/holds-old2.txt > /m1/incoming/holds/holds-old3L.txt
Holds Report Script – Part 3# Prepare lending audits
cp holds-current.asc holds-currentL.csvcp holds-old.asc holds-oldL.csv
/bin/cat holds-current3L.txt >> holds-currentL.csv/bin/cat holds-old3L.txt >> holds-oldL.csv
# Mail lending audits
(uuencode /m1/incoming/holds/holds-currentL.csv holds-currentL.csv; uuencode /m1/incoming/holds/holds-oldL.csv holds-oldL.csv) | mailx -s "Report of Holds" [email protected] [email protected] [email protected]
mv *.txt oldfilsmv *.csv oldfils
exit
<h2>Circulation Desk</h2><CFQUERY DATASOURCE = "VOYAGER" NAME = "holds">SELECT
HOLD_RECALL.CREATE_DATE, LOCATION.LOCATION_NAME, MFHD_MASTER.DISPLAY_CALL_NO, ITEM_TYPE.ITEM_TYPE_DISPLAY, BIB_TEXT.TITLE, HOLD_RECALL.PATRON_COMMENT, MFHD_ITEM.ITEM_ENUM, ITEM_BARCODE.ITEM_BARCODE
FROM (((((MFHD_MASTER INNER JOIN MFHD_ITEM ON MFHD_MASTER.MFHD_ID = MFHD_ITEM.MFHD_ID) INNER JOIN LOCATION ON MFHD_MASTER.LOCATION_ID = LOCATION.LOCATION_ID) INNER JOIN (BIB_MFHD INNER JOIN BIB_TEXT ON BIB_MFHD.BIB_ID = BIB_TEXT.BIB_ID) ON MFHD_MASTER.MFHD_ID =
BIB_MFHD.MFHD_ID) INNER JOIN (ITEM_TYPE INNER JOIN ((HOLD_RECALL INNER JOIN HOLD_RECALL_ITEMS ON HOLD_RECALL.HOLD_RECALL_ID =
HOLD_RECALL_ITEMS.HOLD_RECALL_ID) INNER JOIN ITEM ON HOLD_RECALL_ITEMS.ITEM_ID = ITEM.ITEM_ID) ON
ITEM_TYPE.ITEM_TYPE_ID = ITEM.ITEM_TYPE_ID) ON MFHD_ITEM.ITEM_ID = ITEM.ITEM_ID) INNER JOIN ITEM_STATUS ON ITEM.ITEM_ID = ITEM_STATUS.ITEM_ID) INNER JOIN ITEM_BARCODE
ON ITEM.ITEM_ID = ITEM_BARCODE.ITEM_IDWHERE
(((HOLD_RECALL_ITEMS.HOLD_RECALL_STATUS)='1') AND ((HOLD_RECALL_ITEMS.QUEUE_POSITION)='1') AND ((HOLD_RECALL.CREATE_OPID) Like 'OPAC') AND ((ITEM_STATUS.ITEM_STATUS) In ('1','11')) AND ((HOLD_RECALL.PICKUP_LOCATION)='22'))
ORDER BY LOCATION.LOCATION_NAME, MFHD_MASTER.NORMALIZED_CALL_NO;</CFQUERY>
Coldfusion Query
<cfset todayDate = Now()><cfset todayDate = DateFormat(todayDate, "mmm-d")><cfif holds.RecordCount eq 0><h2>No pending hold requests found</h2><cfelse><cfset nrows = 1><table><th scope="col"></th><th scope="col">Date</th><th scope="col">Location</th><th scope="col">Call Number</th><th scope="col">Type</th><th scope="col">Title</th><th scope="col">Patron Comments</th><th scope="col">Barcode</th><cfoutput query="holds"><tr><th scope="row">#nrows#</th><cfif DateFormat(holds.CREATE_DATE, "mmm-d") eq todayDate><cfset datestyle = 'today'><cfelse><cfset datestyle = 'otherday'></cfif><td class="#datestyle#" width="7%">#DateFormat(holds.CREATE_DATE, "mmm-d")# #TimeFormat(holds.CREATE_DATE, "h:mmtt")#</td><td width="5%">#holds.LOCATION_NAME#</td><td >#holds.DISPLAY_CALL_NO# #holds.ITEM_ENUM#</td><td width="3%">#holds.ITEM_TYPE_DISPLAY#</td><td width="45%">#holds.TITLE#</td><td width="5%">#holds.PATRON_COMMENT#</td><td width="7%">#holds.ITEM_BARCODE#</td></tr><cfset nrows = nrows+1></cfoutput></cfif></table>
Coldfusion Output
Live Coldfusion Query/Report
GETTING THE WORD OUT Designed posters which
were displayed in Library and in academic buildings, dorms, student center.
Designed business cards which were distributed at Library service points.
GETTING THE WORD OUT, CONTINUED
Prominently promoted on Library webpage:
USE DATA
We receive monthly report of total # of requests.
We track # of cancelled holds – 20% not picked up.
Fall 2013, 831 items fetched. Spring 2014, 900 items fetched.
ASSESSMENT
During Spring 2014, we contacted 300 patrons who had used the service and asked them to complete an anonymous survey.
Students use the service much more than faculty.
Users discovered the service using online catalog, homepage or by word of mouth from library staff and/or friends.
Overwhelmingly, students love and recommend Fetch!
ASSESSMENT, CONTINUED
Based on survey feedback, for the Fall 2014 semester:
We increased hold shelf life from 3 to 5 days.
We increased frequency of Item Available notification.
We asked librarians to mention during instruction.
We promoted service in campus newspapers and on FB.
QUESTIONS
Ray Schwartz: Library Information [email protected] or 973.720.3192
Victoria Wagner: Access Services Librarian, Head of Lending [email protected] or 973.720.3190