]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/print.js
receipts
[working/Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / print.js
1 dump('entering util/print.js\n');
2
3 if (typeof util == 'undefined') util = {};
4 util.print = function () {
5
6         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
7
8         JSAN.use('util.error'); this.error = new util.error();
9         JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init( { 'via':'stash' } );
10         JSAN.use('util.window'); this.win = new util.window();
11
12         return this;
13 };
14
15 util.print.prototype = {
16
17         'simple' : function(msg,params) {
18
19                 if (!params) params = {};
20
21                 var obj = this;
22
23                 obj.data.last_print = msg; obj.data.stash('last_print');
24
25                 var silent = false;
26                 if (params && params.no_prompt && params.no_prompt == true) silent = true;
27
28                 var w = obj.win.open('data:text/html,<html>' + window.escape(msg) + '</html>','temp','chrome,resizable');
29
30                 w.minimize();
31
32                 setTimeout(
33                         function() {
34                                 try {
35                                         obj.NSPrint(w, silent, params);
36                                 } catch(E) {
37                                         obj.error.sdump('D_ERROR','util.print.simple: ' + E);
38                                         w.print();
39                                 }
40                                 w.minimize(); w.close();
41                         }, 0
42                 );
43         },
44         
45         'tree_list' : function (params) { 
46                 var cols;
47                 switch(params.type) {
48                         case 'items':
49                                 JSAN.use('circ.util');
50                                 cols = util.functional.map_list(
51                                         circ.util.columns( {} ),
52                                         function(o) {
53                                                 return '%' + o.id + '%';
54                                         }
55                                 );
56                         break;
57                         case 'holds':
58                                 JSAN.use('circ.util');
59                                 cols = util.functional.map_list(
60                                         circ.util.hold_columns( {} ),
61                                         function(o) {
62                                                 return '%' + o.id + '%';
63                                         }
64                                 );
65                         break;
66                         case 'patrons':
67                                 JSAN.use('patron.util');
68                                 cols = util.functional.map_list(
69                                         patron.util.columns( {} ),
70                                         function(o) {
71                                                 return '%' + o.id + '%';
72                                         }
73                                 );
74                         break;
75                 }
76
77                 var s = this.template_sub( params.header, cols, params );
78                 for (var i = 0; i < params.list.length; i++) {
79                         params.row = params.list[i];
80                         s += this.template_sub( params.line_item, cols, params );
81                 }
82                 s += this.template_sub( params.footer, cols, params );
83
84                 if (params.sample_frame) {
85                         params.sample_frame.setAttribute('src','data:text/html,<html>' + window.escape(s) + '</html>');
86                 } else {
87                         this.simple(s);
88                 }
89         },
90
91         'template_sub' : function( msg, cols, params ) {
92                 if (!msg) { dump('template sub called with empty string\n'); return; }
93                 JSAN.use('util.date');
94                 var s = msg;
95
96                 try{s = s.replace(/%LIBRARY%/,params.lib.name());}
97                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
98                 try{s = s.replace(/%PINES_CODE%/,params.lib.shortname());}
99                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
100                 try{s = s.replace(/%STAFF_FIRSTNAME%/,params.staff.first_given_name());}
101                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
102                 try{s = s.replace(/%STAFF_LASTNAME%/,params.staff.family_name());}
103                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
104                 try{s = s.replace(/%STAFF_BARCODE%/,'123abc'); } /* FIXME -- cheating */
105                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
106                 try{s = s.replace(/%PATRON_FIRSTNAME%/,params.patron.first_given_name());}
107                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
108                 try{s = s.replace(/%PATRON_LASTNAME%/,params.patron.family_name());}
109                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
110                 try{s = s.replace(/%PATRON_BARCODE%/,params.patron.card().barcode());}
111                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
112
113                 try{s=s.replace(/%TODAY%/g,(new Date()));}
114                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
115                 try{s=s.replace(/%TODAY_m%/g,(util.date.formatted_date(new Date(),'%m')));}
116                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
117                 try{s=s.replace(/%TODAY_d%/g,(util.date.formatted_date(new Date(),'%d')));}
118                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
119                 try{s=s.replace(/%TODAY_Y%/g,(util.date.formatted_date(new Date(),'%Y')));}
120                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
121                 try{s=s.replace(/%TODAY_H%/g,(util.date.formatted_date(new Date(),'%H')));}
122                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
123                 try{s=s.replace(/%TODAY_I%/g,(util.date.formatted_date(new Date(),'%I')));}
124                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
125                 try{s=s.replace(/%TODAY_M%/g,(util.date.formatted_date(new Date(),'%M')));}
126                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
127                 try{s=s.replace(/%TODAY_D%/g,(util.date.formatted_date(new Date(),'%D')));}
128                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
129                 try{s=s.replace(/%TODAY_F%/g,(util.date.formatted_date(new Date(),'%F')));}
130                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
131
132                 if (params.row) {
133                         for (var i = 0; i < cols.length; i++) {
134                                 dump('s is "' + s + '"\n');
135                                 dump('params.row is ' + js2JSON(params.row) + '\n');
136                                 dump('col is ' + cols[i] + '\n');
137                                 var re = new RegExp(cols[i],"g");
138                                 try{s=s.replace(re, params.row[i]);}
139                                         catch(E){this.error.sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
140                                 dump('new s is "' + s + '"\n\n');
141                         }
142                 }
143
144                 return s;
145         },
146
147
148         'NSPrint' : function(w,silent,params) {
149                 if (!w) w = window;
150                 try {
151                         var webBrowserPrint = w
152                                 .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
153                                 .getInterface(Components.interfaces.nsIWebBrowserPrint);
154                         this.error.sdump('D_PRINT','webBrowserPrint = ' + webBrowserPrint);
155                         if (webBrowserPrint) {
156                                 var gPrintSettings = GetPrintSettings();
157                                 if (silent) gPrintSettings.printSilent = true;
158                                 else gPrintSettings.printSilent = false;
159                                 if (params) {
160                                         gPrintSettings.marginTop = 0;
161                                         gPrintSettings.marginLeft = 0;
162                                         gPrintSettings.marginBottom = 0;
163                                         gPrintSettings.marginRight = 0;
164                                         if (params.marginLeft) gPrintSettings.marginLeft = params.marginLeft;
165                                 }
166                                 gPrintSettings.headerStrLeft = '';
167                                 gPrintSettings.headerStrCenter = '';
168                                 gPrintSettings.headerStrRight = '';
169                                 gPrintSettings.footerStrLeft = '';
170                                 gPrintSettings.footerStrCenter = '';
171                                 gPrintSettings.footerStrRight = '';
172                                 this.error.sdump('D_PRINT','gPrintSettings = ' + js2JSON(gPrintSettings));
173                                 //alert('gPrintSettings = ' + js2JSON(gPrintSettings));
174                                 webBrowserPrint.print(gPrintSettings, null);
175                                 //alert('Should be printing\n');
176                                 this.error.sdump('D_PRINT','Should be printing\n');
177                         } else {
178                                 //alert('Should not be printing\n');
179                                 this.error.sdump('D_PRINT','Should not be printing\n');
180                         }
181                 } catch (e) {
182                         //alert('Probably not printing: ' + e);
183                         // Pressing cancel is expressed as an NS_ERROR_ABORT return value,
184                         // causing an exception to be thrown which we catch here.
185                         // Unfortunately this will also consume helpful failures, so add a
186                         this.error.sdump('D_PRINT','PRINT EXCEPTION: ' + js2JSON(e) + '\n');
187                         // if you need to debug
188                 }
189
190         },
191
192         'GetPrintSettings' : function() {
193                 try {
194                         var pref = Components.classes["@mozilla.org/preferences-service;1"]
195                                 .getService(Components.interfaces.nsIPrefBranch);
196                         if (pref) {
197                                 this.gPrintSettingsAreGlobal = pref.getBoolPref("print.use_global_printsettings", false);
198                                 this.gSavePrintSettings = pref.getBoolPref("print.save_print_settings", false);
199                         }
200  
201                         var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
202                                 .getService(Components.interfaces.nsIPrintSettingsService);
203                         if (this.gPrintSettingsAreGlobal) {
204                                 this.gPrintSettings = printService.globalPrintSettings;
205                                 this.setPrinterDefaultsForSelectedPrinter(printService);
206                         } else {
207                                 this.gPrintSettings = printService.newPrintSettings;
208                         }
209                 } catch (e) {
210                         this.error.sdump('D_PRINT',"GetPrintSettings() "+e+"\n");
211                         //alert("GetPrintSettings() "+e+"\n");
212                 }
213  
214                 return this.gPrintSettings;
215         },
216
217         'setPrinterDefaultsForSelectedPrint' : function (aPrintService) {
218                 if (this.gPrintSettings.printerName == "") {
219                         this.gPrintSettings.printerName = aPrintService.defaultPrinterName;
220                 }
221  
222                 // First get any defaults from the printer 
223                 aPrintService.initPrintSettingsFromPrinter(this.gPrintSettings.printerName, this.gPrintSettings);
224  
225                 // now augment them with any values from last time
226                 aPrintService.initPrintSettingsFromPrefs(this.gPrintSettings, true, this.gPrintSettings.kInitSaveAll);
227         }
228 }
229
230 dump('exiting util/print.js\n');