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