]> git.evergreen-ils.org Git - working/random.git/blob - contrib/evergreen/eg_workflow.py
fixed bug in property reading from eg_data module. more python style tweaks
[working/random.git] / contrib / evergreen / eg_workflow.py
1 import eg_tasks
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 *
7 import osrf.json
8
9 SUCCESS = {'text_code':'SUCCESS', 'ilsevent':0}
10
11
12 def do_checkout(copyBarcode, patronID, recurse=False):
13
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))
18
19     if evt_txt == OILS_EVENT_SUCCESS:
20         return evt
21
22     if recurse: return None
23
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)
29
30     return None
31
32
33 def do_renew(copyBarcode):
34
35     evt = eg_tasks.RenewTask().start(copy_barcode=copyBarcode)
36     if evt:
37         evt_txt = Event.parse_event(evt).text_code
38         log_info("Renew(%s) -> %s" % (copyBarcode, evt_txt))
39
40         if evt_txt == OILS_EVENT_SUCCESS:
41             return evt
42
43     return None
44
45
46
47 def do_checkin(copyBarcode):
48
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))
52
53     if evt_txt == OILS_EVENT_SUCCESS or evt_txt == 'NO_CHANGE':
54         return SUCCESS
55
56     if evt_txt == 'ROUTE_ITEM':
57
58         log_info("Cancelling post-checkin transit...")
59         res = eg_tasks.AbortTransitTask().start(copy_barcode=copyBarcode)
60
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)))
63             return None
64
65         return SUCCESS
66
67     return None
68
69
70
71 def do_title_hold_permit(titleID, patronID, pickupLib):
72
73     evt = eg_tasks.TitleHoldPermitTask().start(
74         title_id=titleID, patron_id=patronID, pickup_lib=pickupLib)
75
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)))
80
81     if str(evt['success']) != '1':
82         log_info("TitleHoldPermit(%s, %s, %s) not allowed -> %s" % (
83             titleID, patronID, pickupLib, evt))
84         return None
85
86     log_info('TitleHoldPermit(%s, %s, %s) -> SUCCESS' % (titleID, patronID, pickupLib))
87     return True
88
89
90 def to_title_hold(titleID, patronID, pickupLib):
91
92     if not do_title_hold_permit(titleID, patronID, pickupLib):
93         return
94
95     evt = eg_tasks.TitleHoldTask().start(title_id=titleID, patron_id=patronID, pickup_lib=pickupLib)
96     
97     log_info("title task returned %s" % str(evt))
98
99     if isinstance(evt, list):
100         evts = []
101         for e in evt:
102             evts.append(e['text_code'])
103         log_info("TitleHold(%s, %s, %s) -> %s" % (titleID, patronID, pickupLib, str(evts)))
104         return None
105
106     if Event.parse_event(evt):
107         log_info("TitleHold(%s, %s, %s) -> %s" % (titleID, patronID, pickupLib, Event.parse_event(evt).code))
108         return None
109
110     if str(evt) == '-1':
111         log_info("TitleHold(%s, %s, %s) placement failed: %s" % (
112             titleID, patronID, pickupLib, str(evt)))
113         return None
114
115     log_info('TitleHold(%s, %s, %s) -> SUCCESS' % (titleID, patronID, pickupLib))
116     return int(evt) # new hold ID
117
118 def to_title_holdCancel(holdID):
119
120     evt = eg_tasks.TitleHoldCancelTask().start(hold_id=holdID)
121
122     if Event.parse_event(evt):
123         evt_txt = Event.parse_event(evt).text_code
124         if evt_txt == 'ACTION_HOLD_REQUEST_NOT_FOUND':
125             return True
126         raise ILSEventException(
127             "TitleHoldCancel(%s) failed -> %s" % (holdID, str(evt)))
128
129     log_info('TitleHoldCancel(%s) -> SUCCESS' % holdID)
130     return True
131
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))
137     return evt
138
139