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