1 dojo.require("openils.User");
2 dojo.require("openils.widget.OrgUnitFilteringSelect");
3 dojo.requireLocalization("openils.booking", "capture");
5 const CAPTURE_FAILURE = 0;
6 const CAPTURE_SUCCESS = 1;
7 const CAPTURE_UNKNOWN = 2;
9 var localeStrings = dojo.i18n.getLocalization("openils.booking", "capture");
11 function CaptureDisplay(control_holder, data_holder) {
12 this.control_holder = control_holder;
13 this.data_holder = data_holder;
15 CaptureDisplay.prototype.no_payload = function() {
16 this.data_holder.appendChild(
17 document.createTextNode(localeStrings.NO_PAYLOAD)
20 CaptureDisplay.prototype.dump = function(payload) {
21 var div = document.createElement("div");
22 div.appendChild(document.createTextNode(localeStrings.HERES_WHAT_WE_KNOW));
23 this.data_holder.appendChild(div);
25 var ul = document.createElement("ul");
26 for (var k in payload) {
27 var li = document.createElement("li");
28 li.appendChild(document.createTextNode(k + ": " + payload[k]));
31 this.data_holder.appendChild(ul);
33 CaptureDisplay.prototype._generate_barcode_line = function(payload) {
34 var div = document.createElement("div");
35 div.appendChild(document.createTextNode(
36 localeStrings.BARCODE + ": " + payload.resource.barcode()
40 CaptureDisplay.prototype._generate_title_line = function(payload) {
41 var div = document.createElement("div");
42 div.appendChild(document.createTextNode(
43 localeStrings.TITLE + ": " +
44 (payload.mvr ? payload.mvr.title() : payload.type.name())
48 CaptureDisplay.prototype._generate_author_line = function(payload) {
49 var div = document.createElement("div");
51 div.appendChild(document.createTextNode(
52 localeStrings.AUTHOR + ": " + payload.mvr.author()
57 CaptureDisplay.prototype._generate_transit_notice = function(payload) {
58 var div = document.createElement("div");
59 if (payload.transit) {
60 div.setAttribute("class", "transit_notice");
61 div.appendChild(document.createTextNode(localeStrings.TRANSIT));
65 CaptureDisplay.prototype._generate_route_line = function(payload) {
66 var div = document.createElement("div");
67 var strong = document.createElement("strong");
68 strong.appendChild(document.createTextNode(
70 fieldmapper.aou.findOrgUnit(payload.transit.dest()).shortname() :
71 localeStrings.RESERVATION_SHELF) + ":"
73 div.appendChild(document.createTextNode(
74 localeStrings.NEEDS_ROUTED_TO + " "
76 div.appendChild(strong);
79 CaptureDisplay.prototype._generate_patron_info = function(payload) {
80 var p = document.createElement("p");
81 p.innerHTML = "<strong>" + localeStrings.RESERVED + "</strong> " +
82 formal_name(payload.reservation.usr()) + "<br />" +
83 localeStrings.BARCODE + ": " +
84 payload.reservation.usr().card().barcode();
87 CaptureDisplay.prototype._generate_resv_info = function(payload) {
88 var p = document.createElement("p");
89 p.innerHTML = localeStrings.REQUEST + ": " +
90 humanize_timestamp_string(payload.reservation.request_time()) +
92 localeStrings.DURATION + ": " +
93 humanize_timestamp_string(payload.reservation.start_time()) +
95 humanize_timestamp_string(payload.reservation.end_time());
98 CaptureDisplay.prototype._generate_meta_info = function(result) {
99 var p = document.createElement("p");
100 p.innerHTML = localeStrings.SLIP_DATE + ": " + result.servertime +
101 "<br />" + localeStrings.PRINTED_BY + " " +
102 formal_name(openils.User.user) + " " + localeStrings.AT + " " +
103 fieldmapper.aou.findOrgUnit(openils.User.user.ws_ou()).shortname()
106 CaptureDisplay.prototype.display_with_transit_info = function(result) {
107 var div = document.createElement("div");
108 var span = document.createElement("span");
109 span.appendChild(document.createTextNode(localeStrings.CAPTURE_INFO));
110 span.setAttribute("class", "capture_info");
111 this.control_holder.appendChild(span);
113 var button = document.createElement("button");
114 button.setAttribute("class", "print_slip");
115 button.setAttribute("type", "button");
116 button.setAttribute("accesskey", localeStrings.PRINT_ACCESSKEY);
117 button.innerHTML = localeStrings.PRINT;
118 button.onclick = function() {
119 try { dojo.byId("printing_iframe").contentWindow.print(); }
120 catch (E) { alert(E); } /* XXX */
123 this.control_holder.appendChild(button);
125 div.appendChild(this._generate_transit_notice(result.payload));
127 var p = document.createElement("p");
128 p.appendChild(this._generate_route_line(result.payload));
129 p.appendChild(this._generate_barcode_line(result.payload));
130 p.appendChild(this._generate_title_line(result.payload));
131 p.appendChild(this._generate_author_line(result.payload));
134 div.appendChild(this._generate_patron_info(result.payload));
135 div.appendChild(this._generate_resv_info(result.payload));
136 div.appendChild(this._generate_meta_info(result));
138 this._create_iframe(div);
140 CaptureDisplay.prototype._create_iframe = function(contents) {
141 var iframe = document.createElement("iframe");
142 iframe.setAttribute("name", "printing_iframe");
143 iframe.setAttribute("id", "printing_iframe");
144 iframe.setAttribute("src", "");
145 iframe.setAttribute("width", "100%");
146 iframe.setAttribute("height", "400"); /* hardcode 400px? really? */
148 this.data_holder.appendChild(iframe);
150 var w = dojo.byId("printing_iframe").contentWindow;
153 "<html><head><link rel='stylesheet' type='text/css' href='" +
154 dojo.byId("booking_stylesheet_link").href +
155 "' /><body></body></html>"
158 w.document.body.appendChild(contents);
159 /* FIXME if (determine_autoprint_setting_somehow()) w.print(); */
161 CaptureDisplay.prototype.clear = function() {
162 this.control_holder.innerHTML = "";
163 this.data_holder.innerHTML = "";
165 CaptureDisplay.prototype.load = function(result) {
167 this.control_holder.appendChild(document.createElement("hr"));
168 if (!result.payload) {
170 } else if (!result.payload.fail_cause && result.payload.captured) {
171 this.display_with_transit_info(result);
173 this.dump(result.payload);
183 function clear_for_next() {
184 if (last_result == CAPTURE_SUCCESS) {
185 last_result = undefined;
186 document.getElementById("result_display").innerHTML = "";
187 document.getElementById("resource_barcode").value = "";
192 var barcode = document.getElementById("resource_barcode").value;
193 var result = fieldmapper.standardRequest(
196 "open-ils.booking.resources.capture_for_reservation"
198 [xulG.auth.session.key, barcode]
201 if (result && result.ilsevent !== undefined) {
202 if (result.payload && result.payload.captured > 0) {
203 capture_display.load(result);
204 return CAPTURE_SUCCESS;
206 capture_display.load(result);
207 alert(my_ils_error(localeStrings.CAPTURED_NOTHING, result));
208 return CAPTURE_FAILURE;
211 return CAPTURE_UNKNOWN;
215 function attempt_capture() {
216 var rd = document.getElementById("result_display");
217 capture_display.clear();
218 switch(last_result = capture()) {
219 case CAPTURE_FAILURE:
220 rd.setAttribute("class", "capture_failure");
221 rd.innerHTML = localeStrings.FAILURE;
223 case CAPTURE_SUCCESS:
224 rd.setAttribute("class", "capture_success");
225 rd.innerHTML = localeStrings.SUCCESS;
228 alert(localeStrings.UNKNOWN_PROBLEM);
234 init_auto_l10n(dojo.byId("auto_l10n_start_here"));
235 capture_display = new CaptureDisplay(
236 dojo.byId("capture_info_top"),
237 dojo.byId("capture_info_bottom")