1 dojo.require("dijit.form.Button");
2 dojo.require("dijit.form.RadioButton");
3 dojo.require("dijit.form.NumberSpinner");
4 dojo.require("dijit.form.TextBox");
5 dojo.require("dojo.dnd.Source");
6 dojo.require("openils.widget.AutoGrid");
7 dojo.require("openils.widget.ProgressDialog");
8 dojo.require("openils.PermaCrud");
9 dojo.require("openils.CGI");
15 var context_url_param;
17 function format_routing_label(routing_label) {
18 return routing_label ? routing_label : "[None]";
21 function load_sstr_grid() {
22 sstr_grid.overrideEditWidgets.distribution =
23 new dijit.form.TextBox({"disabled": true, "value": dist_id});
25 sstr_grid.resetStore();
27 {"order_by": {"ssub": "start_date DESC"}},
28 {"distribution": dist_id}
32 function load_sdist_display() {
35 "onresponse": function(r) {
36 if (r = openils.Util.readResponse(r)) {
37 var link = dojo.byId("sdist_label_here");
38 link.onclick = function() {
39 location.href = oilsBasePath +
40 "/serial/subscription?id=" +
41 r.subscription() + "&tab=distributions" +
44 link.innerHTML = r.label();
45 load_sdist_org_unit_display(r);
52 function load_sdist_org_unit_display(dist) {
53 dojo.byId("sdist_org_unit_name_here").innerHTML =
54 aou.findOrgUnit(dist.holding_lib()).name();
57 function create_many_streams(fields) {
59 for (var i = 0; i < fields.quantity; i++) {
60 var stream = new sstr();
61 stream.distribution(dist_id);
65 progress_dialog.show(true);
68 "oncomplete": function(r, list) {
69 progress_dialog.hide();
72 "onerror": function(r) {
73 progress_dialog.hide();
74 alert("Error creating streams!"); /* XXX i18n */
80 function RLUEditor() {
83 function _reader_xor_dept_toggle(value) {
84 var reader = dijit.byId("reader");
85 var department = dijit.byId("department");
87 if (this.id.match(/\w+$/).pop() == "reader")
88 _reader_toggle(value, reader, department);
90 _department_toggle(value, reader, department);
93 function _reader_toggle(value, reader, department) {
95 reader.attr("disabled", false);
96 department.attr("disabled", true);
97 setTimeout(function() { reader.focus(); }, 125);
101 function _department_toggle(value, reader, department) {
103 reader.attr("disabled", true);
104 department.attr("disabled", false);
105 setTimeout(function() { department.focus(); }, 125);
109 this.user_to_source_entry = function(user) {
110 var node = dojo.create("li");
113 s = dojo.string.substitute(
114 this.template.reader, [
115 user.reader().card().barcode(),
116 user.reader().family_name(),
117 user.reader().first_given_name(),
118 user.reader().second_given_name(),
119 user.reader().home_ou().shortname()
120 ].map(function(o) { return o == null ? "" : o; })
123 s = dojo.string.substitute(
124 this.template.department, [user.department()]
129 s += dojo.string.substitute(this.template.note, [user.note()]);
132 node.innerHTML = " " + s;
136 "href": "javascript:void(0);",
137 "onclick": function() { self.toggle_deleted(node); },
138 "innerHTML": this.template.remove
146 this.toggle_deleted = function(node) {
147 if (node._user.isdeleted()) {
148 dojo.style(node, "textDecoration", "none");
149 node._user.isdeleted(false);
151 dojo.style(node, "textDecoration", "line-through");
152 node._user.isdeleted(true);
156 this.new_user = function() {
157 var form = this.dialog.attr("value");
158 var user = new fieldmapper.srlu();
160 user.stream(this.stream);
163 user.note(form.note);
165 if (form.department) {
166 user.department(form.department);
167 } else if (form.reader) {
168 this.add_button.attr("disabled", true);
169 fieldmapper.standardRequest(
171 "open-ils.actor.user.fleshed.retrieve_by_barcode"], {
172 "params": [openils.User.authtoken, form.reader, true],
173 "timeout": 10, /* sync */
174 "onresponse": function(r) {
175 if (r = openils.Util.readResponse(r)) {
181 this.add_button.attr("disabled", false);
183 alert("Provide either a reader or a department."); /* XXX i18n */
187 ["reader", "department", "note"].forEach(
188 function(s) { dijit.byId(s).attr("value", ""); }
191 this.source.insertNodes(false, [self.user_to_source_entry(user)]);
194 this.show = function() {
195 if (sstr_grid.getSelectedRows().length != 1) {
197 "Use the checkboxes to select exactly one stream " +
198 "for this operation." /* XXX i18n */
201 /* AutoGrid.getSelectedItems() yields a weird, non-FM object */
202 this.stream = sstr_grid.getSelectedItems()[0].id[0];
204 this.source.selectAll();
205 this.source.deleteSelectedNodes();
206 this.source.clearItems();
210 fieldmapper.standardRequest(
212 "open-ils.serial.routing_list_users.fleshed_and_ordered"], {
213 "params": [openils.User.authtoken, this.stream],
215 "onresponse": function(r) {
216 if (r = openils.Util.readResponse(r)) {
217 self.source.insertNodes(
218 false, [self.user_to_source_entry(r)]
222 "oncomplete": function() {
224 function() { self.save_button.focus(); }, 125
232 this.save = function() {
233 var obj_list = this.source.getAllNodes().map(
235 var obj = node._user;
237 obj.reader(obj.reader().id());
243 this.save_button.attr("disabled", true);
245 /* pcrud.apply *almost* could have handled this, but there's a reason
246 * it doesn't, and it has to do with the unique key constraint on the
247 * pos field in srlu objects.
250 fieldmapper.standardRequest(
251 /* This method will set pos in ascending order. */
253 "open-ils.serial.routing_list_users.replace"], {
254 "params": [openils.User.authtoken, obj_list],
255 "timeout": 10, /* sync */
256 "oncomplete": function(r) {
257 openils.Util.readResponse(r); /* display exceptions */
262 alert(E); /* XXX i18n */
265 this.save_button.attr("disabled", false);
268 this._init = function(dialog) {
269 this.dialog = dijit.byId("routing_list_dialog");
270 this.source = routing_list_source;
273 ["reader", "department", "note", "remove"].forEach(
276 dojo.byId("routing_list_user_template_" + n).innerHTML;
280 this.add_button = dijit.byId("routing_list_add_button");
281 this.save_button = dijit.byId("routing_list_save_button");
283 dijit.byId("reader_xor_dept-reader").onChange =
284 _reader_xor_dept_toggle;
285 dijit.byId("reader_xor_dept-department").onChange =
286 _reader_xor_dept_toggle;
289 this._init.apply(this, arguments);
292 openils.Util.addOnLoad(
294 cgi = new openils.CGI();
295 pcrud = new openils.PermaCrud();
296 rlu_editor = new RLUEditor();
298 dist_id = cgi.param("distribution");
299 load_sdist_display();
302 var context = cgi.param('context');
304 context_url_param = '&context=' + context;
306 context_url_param = '';