2 from eg_data import DataManager
3 from eg_utils import ILSEventException
4 from constrictor.log import *
5 from oils.event import Event
6 from oils.const import *
9 SUCCESS = {'text_code':'SUCCESS', 'ilsevent':0}
12 def do_checkout(copyBarcode, patronID, recurse=False):
14 evt = eg_tasks.CheckoutTask().start(
15 copy_barcode=copyBarcode, patron_id=patronID)
16 evt_txt = Event.parse_event(evt).text_code
17 log_info("Checkout(%s,%s) -> %s" % (copyBarcode, patronID, evt_txt))
19 if evt_txt == OILS_EVENT_SUCCESS:
22 if recurse: return None
24 if evt_txt == 'OPEN_CIRCULATION_EXISTS':
25 evt = do_checkin(copyBarcode)
26 if evt_txt == OILS_EVENT_SUCCESS:
27 return do_checkout(copyBarcode, patronID, True)
28 log_info("* Unable to checkin open circ: %s" % copyBarcode)
33 def do_renew(copyBarcode):
35 evt = eg_tasks.RenewTask().start(copy_barcode=copyBarcode)
37 evt_txt = Event.parse_event(evt).text_code
38 log_info("Renew(%s) -> %s" % (copyBarcode, evt_txt))
40 if evt_txt == OILS_EVENT_SUCCESS:
47 def do_checkin(copyBarcode):
49 evt = eg_tasks.CheckinTask().start(copy_barcode=copyBarcode)
50 evt_txt = Event.parse_event(evt).text_code
51 log_info("Checkin(%s) -> %s" % (copyBarcode, evt_txt))
53 if evt_txt == OILS_EVENT_SUCCESS or evt_txt == 'NO_CHANGE':
56 if evt_txt == 'ROUTE_ITEM':
58 log_info("Cancelling post-checkin transit...")
59 res = eg_tasks.AbortTransitTask().start(copy_barcode=copyBarcode)
61 if Event.parse_event(res): # transit returns "1" on success
62 log_error("Unable to abort transit for %s : %s" % (copyBarcode, osrf.json.to_json(evt)))
71 def do_title_hold_permit(titleID, patronID, pickupLib):
73 evt = eg_tasks.TitleHoldPermitTask().start(
74 title_id=titleID, patron_id=patronID, pickup_lib=pickupLib)
76 if Event.parse_event(evt):
77 raise ILSEventException(
78 "TitleHoldPermit(%s, %s, %s) failed -> %s" % (
79 titleID, patronID, pickupLib, osrf.json.to_json(evt)))
81 if str(evt['success']) != '1':
82 log_info("TitleHoldPermit(%s, %s, %s) not allowed -> %s" % (
83 titleID, patronID, pickupLib, evt))
86 log_info('TitleHoldPermit(%s, %s, %s) -> SUCCESS' % (titleID, patronID, pickupLib))
90 def to_title_hold(titleID, patronID, pickupLib):
92 if not do_title_hold_permit(titleID, patronID, pickupLib):
95 evt = eg_tasks.TitleHoldTask().start(title_id=titleID, patron_id=patronID, pickup_lib=pickupLib)
97 log_info("title task returned %s" % str(evt))
99 if isinstance(evt, list):
102 evts.append(e['text_code'])
103 log_info("TitleHold(%s, %s, %s) -> %s" % (titleID, patronID, pickupLib, str(evts)))
106 if Event.parse_event(evt):
107 log_info("TitleHold(%s, %s, %s) -> %s" % (titleID, patronID, pickupLib, Event.parse_event(evt).code))
111 log_info("TitleHold(%s, %s, %s) placement failed: %s" % (
112 titleID, patronID, pickupLib, str(evt)))
115 log_info('TitleHold(%s, %s, %s) -> SUCCESS' % (titleID, patronID, pickupLib))
116 return int(evt) # new hold ID
118 def to_title_holdCancel(holdID):
120 evt = eg_tasks.TitleHoldCancelTask().start(hold_id=holdID)
122 if Event.parse_event(evt):
123 evt_txt = Event.parse_event(evt).text_code
124 if evt_txt == 'ACTION_HOLD_REQUEST_NOT_FOUND':
126 raise ILSEventException(
127 "TitleHoldCancel(%s) failed -> %s" % (holdID, str(evt)))
129 log_info('TitleHoldCancel(%s) -> SUCCESS' % holdID)
132 def to_title_holdFetchAll(patronID):
133 evt = eg_tasks.TitleHoldFetchAllTask().start(patron_id=patronID)
134 if Event.parse_event(evt):
135 raise ILSEventException(
136 "TitleHoldFetchAll(%s) failed -> %s" % (patronID, evt))