]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/serial/print_routing_list_users.js
LP 1779467: Fix SyntaxError: missing ) after argument list
[working/Evergreen.git] / Open-ILS / web / js / ui / default / serial / print_routing_list_users.js
1 dojo.require("dojo.string");
2 dojo.require("dijit.form.Button");
3
4 var list_renderer;
5
6 function n(name, ctx) { return dojo.query("[name='" + name + "']", ctx)[0]; }
7
8 function ListRenderer() {
9     var self = this;
10
11     this.render = function() {
12         var rendered_something = false;
13
14         for (var i = 0; i < this.streams.length; i++) {
15             var stream = this.streams[i];
16
17             if (!this.users_by_stream[stream.id()])
18                 continue; /* no users on this stream */
19
20             var list = dojo.clone(this.list_template);
21             n("title", list).innerHTML = this.mvr.title();
22             n("issuance_label", list).innerHTML = this.issuance.label();
23             n("distribution_holding_lib", list).innerHTML =
24                 stream.distribution().holding_lib().shortname();
25             n("distribution_label", list).innerHTML =
26                 stream.distribution().label();
27             if (stream.routing_label()) {
28                 n("stream_routing_label", list).innerHTML =
29                     stream.routing_label();
30                 openils.Util.show(
31                     n("stream_routing_label", list), "inline"
32                 );
33             } else {
34                 n("stream_id", list).innerHTML = stream.id();
35                 openils.Util.show(n("stream_id_container", list), "inline");
36             }
37
38             this.render_users(stream, list);
39
40             if (rendered_something) {
41                 dojo.create(
42                     "hr",
43                     {"style": "page-break-after: always"}, this.target, "last"
44                 );
45             }
46
47             dojo.place(list, this.target, "last");
48             rendered_something = true;
49         }
50
51         return this; /* for chaining */
52     };
53
54     this._render_reader_addresses = function(reader, node) {
55         var used_ids = {};
56         ["mailing", "billing"].forEach(
57             function(addr_type) {
58                 var addr = reader[addr_type + "_address"]();
59                 if (!addr || !addr.valid() || used_ids[addr.id()])
60                     return;
61
62                 used_ids[addr.id()] = true;
63
64                 var prefix = addr_type + "_address_";
65                 var container = n(prefix + "container", node);
66                 if (container)
67                     openils.Util.show(container);
68
69                 ["street1", "street2", "city", "county", "state",
70                     "country", "post_code"].forEach(
71                     function(f) {
72                         var field = prefix + f;
73                         var target = n(field, node);
74                         if (target)
75                             target.innerHTML = addr[f]();
76                     }
77                 );
78             }
79         );
80     };
81
82     this.render_users = function(stream, list) {
83         for (var i = 0; i < this.users_by_stream[stream.id()].length; i++) {
84             var user = this.users_by_stream[stream.id()][i];
85             var node = dojo.clone(this.user_template);
86
87             if (user.reader()) {
88                 n("barcode", node).innerHTML = user.reader().card().barcode();
89                 n("name", node).innerHTML = dojo.string.substitute(
90                     "${0}, ${1} ${2}", [
91                         user.reader().family_name(),
92                         user.reader().first_given_name(),
93                         user.reader().second_given_name()
94                     ].map(function(n) { return n || ""; })
95                 );
96                 n("ou", node).innerHTML = user.reader().home_ou().shortname();
97
98                 this._render_reader_addresses(user.reader(), node);
99
100                 openils.Util.show(n("reader_container", node), "inline");
101             } else if (user.department()) {
102                 n("department", node).innerHTML = user.department();
103                 openils.Util.show(n("department_container", node), "inline");
104             }
105
106             if (user.note()) {
107                 n("note", node).innerHTML = user.note();
108                 openils.Util.show(n("note_container", node), "inline");
109             }
110
111             dojo.place(node, n("users", list), "last");
112         }
113     };
114
115     this.print = function() {
116         this.print_target.print();
117     }
118
119     this._sort_users = function() {
120         this.users_by_stream = {};
121         this.users.forEach(
122             function(user) {
123                 var key = user.stream();
124                 if (!self.users_by_stream[key])
125                     self.users_by_stream[key] = [];
126                 self.users_by_stream[key].push(user);
127             }
128         );
129     };
130
131     /* Unfortunately, when we print the main window with dijits
132      * wrapping everything, the page-break-* CSS properties don't work
133      * inside of there, so we need an iframe to print from.
134      */
135     this._prepare_iframe = function() {
136         var iframe = dojo.create(
137             "iframe", {
138                 "src": "", "width": "100%", "height": "500", "frameborder": 0
139             }, "iframe_in_here", "only"
140         );
141
142         iframe.contentWindow.document.open();
143         iframe.contentWindow.document.write(
144             "<html><head><link rel='stylesheet' href='" +
145             dojo.byId("serials_stylesheet_link").href +
146             "' type='text/css' />" +
147             "</style></head>\n<body></body></html>"
148         );
149         iframe.contentWindow.document.close();
150         this.target = iframe.contentWindow.document.body;
151         this.print_target = iframe.contentWindow;
152     };
153
154     this._init = function(data) {
155         this.user_template = dojo.byId("user_template");
156         this.user_template.removeAttribute("id");
157         this.user_template.parentNode.removeChild(this.user_template);
158
159         this.list_template = dojo.byId("list_template");
160         this.list_template.removeAttribute("id");
161         this.list_template.parentNode.removeChild(this.list_template);
162
163         dojo.mixin(this, data);
164
165         this._sort_users();
166         this._prepare_iframe();
167     }
168
169     this._init.apply(this, arguments);
170 }
171
172 function page_init() {
173     list_renderer = new ListRenderer(xulG.routing_list_data);
174     list_renderer.render().print();
175 }
176
177 openils.Util.addOnLoad(
178     function() {
179         // assume we're NOT in the web staff client if we have xulG
180         if (typeof xulG !== 'undefined') return page_init();
181     }
182 );