]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/booking/capture.js
Patch from Lebbeous Fogle-Weekley to reservation pull list and resource capture inter...
[working/Evergreen.git] / Open-ILS / web / js / ui / default / booking / capture.js
1 dojo.require("openils.User");
2 dojo.require("openils.widget.OrgUnitFilteringSelect");
3 dojo.requireLocalization("openils.booking", "capture");
4
5 const CAPTURE_FAILURE = 0;
6 const CAPTURE_SUCCESS = 1;
7 const CAPTURE_UNKNOWN = 2;
8
9 var localeStrings = dojo.i18n.getLocalization("openils.booking", "capture");
10
11 function CaptureDisplay(element) { this.element = element; }
12 CaptureDisplay.prototype.no_payload = function() {
13     this.element.appendChild(document.createTextNode(localeStrings.NO_PAYLOAD));
14 };
15 CaptureDisplay.prototype.dump = function(payload) {
16     var div = document.createElement("div");
17     div.appendChild(document.createTextNode(localeStrings.HERES_WHAT_WE_KNOW));
18     this.element.appendChild(div);
19
20     var ul = document.createElement("ul");
21     for (var k in payload) {
22         var li = document.createElement("li");
23         li.appendChild(document.createTextNode(k + ": " + payload[k]));
24         ul.appendChild(li);
25     }
26     this.element.appendChild(ul);
27 };
28 CaptureDisplay.prototype.generate_transit_display = function(payload) {
29     var super_div = document.createElement("div");
30     var div;
31
32     div = document.createElement("div");
33     div.appendChild(document.createTextNode(
34         localeStrings.CAPTURE_CAUSES_TRANSIT
35     ));
36     div.setAttribute("class", "transit_notice");
37     super_div.appendChild(div);
38
39     div = document.createElement("div");
40     div.appendChild(document.createTextNode(
41         localeStrings.CAPTURE_TRANSIT_SOURCE + " " +
42         fieldmapper.aou.findOrgUnit(payload.transit.source()).shortname()
43     ));
44     super_div.appendChild(div);
45
46     div = document.createElement("div");
47     div.appendChild(document.createTextNode(
48         localeStrings.CAPTURE_TRANSIT_DEST + " " +
49         fieldmapper.aou.findOrgUnit(payload.transit.dest()).shortname()
50     ));
51     super_div.appendChild(div);
52
53     return super_div;
54 };
55 CaptureDisplay.prototype.display_with_transit_info = function(payload) {
56     var div;
57
58     div = document.createElement("div");
59     div.appendChild(document.createTextNode(localeStrings.CAPTURE_INFO));
60     div.setAttribute("class", "capture_info");
61     this.element.appendChild(div);
62
63     if (payload.catalog_item) {
64         div = document.createElement("div");
65         div.appendChild(document.createTextNode(
66             localeStrings.CAPTURE_BRESV_BRSRC + " " +
67             payload.catalog_item.barcode()
68         ));
69         this.element.appendChild(div);
70     }
71
72     div = document.createElement("div");
73     div.appendChild(document.createTextNode(
74         localeStrings.CAPTURE_BRESV_DATES + " " +
75         humanize_timestamp_string(payload.reservation.start_time()) + " - " +
76         humanize_timestamp_string(payload.reservation.end_time())
77     ));
78     this.element.appendChild(div);
79
80     div = document.createElement("div");
81     div.appendChild(document.createTextNode(
82         localeStrings.CAPTURE_BRESV_PICKUP_LIB + " " +
83         fieldmapper.aou.findOrgUnit(
84             payload.reservation.pickup_lib()
85         ).shortname()
86     ));
87     this.element.appendChild(div);
88
89     div = document.createElement("div");
90     div.appendChild(document.createTextNode(
91         localeStrings.CAPTURE_BRESV_PATRON_BARCODE + " " +
92         payload.reservation.usr().card().barcode()
93     ));
94     this.element.appendChild(div);
95
96     if (payload.transit) {
97         this.element.appendChild(this.generate_transit_display(payload));
98     }
99 };
100 CaptureDisplay.prototype.clear = function() { this.element.innerHTML = ""; };
101 CaptureDisplay.prototype.load = function(payload) {
102     try {
103         this.element.appendChild(document.createElement("hr"));
104         if (!payload) {
105             this.no_payload();
106         } else if (!payload.fail_cause && payload.captured) {
107             this.display_with_transit_info(payload);
108         } else {
109             this.dump(payload);
110         }
111     } catch (E) {
112         alert(E); /* XXX */
113     }
114 };
115
116 var capture_display;
117 var last_result;
118
119 function clear_for_next() {
120     if (last_result == CAPTURE_SUCCESS) {
121         last_result = undefined;
122         document.getElementById("result_display").innerHTML = "";
123         document.getElementById("resource_barcode").value = "";
124     }
125 }
126
127 function capture() {
128     var barcode = document.getElementById("resource_barcode").value;
129     var result = fieldmapper.standardRequest(
130         [
131             "open-ils.booking",
132             "open-ils.booking.resources.capture_for_reservation"
133         ],
134         [xulG.auth.session.key, barcode]
135     );
136
137     if (result && result.ilsevent !== undefined) {
138         if (result.payload && result.payload.captured > 0) {
139             capture_display.load(result.payload);
140             return CAPTURE_SUCCESS;
141         } else {
142             capture_display.load(result.payload);
143             alert(my_ils_error(localeStrings.CAPTURED_NOTHING, result));
144             return CAPTURE_FAILURE;
145         }
146     } else {
147         return CAPTURE_UNKNOWN;
148     }
149 }
150
151 function attempt_capture() {
152     var rd = document.getElementById("result_display");
153     capture_display.clear();
154     switch(last_result = capture()) {
155         case CAPTURE_FAILURE:
156             rd.setAttribute("class", "capture_failure");
157             rd.innerHTML = localeStrings.FAILURE;
158             break;
159         case CAPTURE_SUCCESS:
160             rd.setAttribute("class", "capture_success");
161             rd.innerHTML = localeStrings.SUCCESS;
162             break;
163         default:
164             alert(localeStrings.UNKNOWN_PROBLEM);
165             break;
166     }
167 }
168
169 function my_init() {
170     init_auto_l10n(document.getElementById("auto_l10n_start_here"));
171     capture_display = new CaptureDisplay(
172         document.getElementById("capture_display")
173     );
174 }