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