]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/util/print.js
try this on windows
[working/Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / util / print.js
1 sdump('D_TRACE','Loading print.js\n');
2
3 var print_crlf = '<br />\r\n';
4
5 // Higher-level
6
7 function print_itemsout_receipt(params,sample_view) {
8         sdump('D_PRINT',arg_dump(arguments));
9         var s = ''; params.current_circ = new circ(); params.current_copy = new acp(); params.current_mvr = new mvr();
10         if (params.header) { s += print_template_replace(params.header, params); }
11         for (var i = 0; i < params.au.checkouts().length; i++) {
12                 params.current_circ = params.au.checkouts()[i].circ;
13                 params.current_copy = params.au.checkouts()[i].copy;
14                 params.current_mvr = params.au.checkouts()[i].record;
15                 params.current_index = i;
16                 s += print_template_replace(params.line_item, params); 
17         }
18         if (params.footer) { s += print_template_replace(params.footer, params); }
19         s = s.replace( /\n/g, print_crlf );
20         if (sample_view) {
21                 sample_view.setAttribute( 'src', 'data:text/html,<html>' + s + '</html>\r\n' );
22         } else {
23                 sPrint( s );
24         }
25 }
26
27 function print_template_replace(s,params) {
28
29                 function trunc(t) {
30                         if (params.truncate) {
31                                 try {
32                                         return t.toString().substr(0,params.truncate);
33                                 } catch(E) {
34                                         return t;
35                                 }
36                         } else {
37                                 return t;
38                         }
39                 }
40                 function ttrunc(t) {
41                         if (params.title_truncate) {
42                                 try {
43                                         return t.toString().substr(0,params.title_truncate);
44                                 } catch(E) {
45                                         return t;
46                                 }
47                         } else {
48                                 return t;
49                         }
50                 }
51                 function atrunc(t) {
52                         if (params.author_truncate) {
53                                 try {
54                                         return t.toString().substr(0,params.author_truncate);
55                                 } catch(E) {
56                                         return t;
57                                 }
58                         } else {
59                                 return t;
60                         }
61                 }
62
63
64
65                 var b = s.match( /%TRUNC.{0,3}:\s*(\d+)%/ );
66                 if (b) params.truncate = b[1];
67
68                 try{s=s.replace(/%TRUNC.{0,3}:\s*\d+%/g,'');}
69                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
70                 try{s=s.replace(/%LIBRARY%/g,trunc(params.lib.name()));}
71                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
72                 try{s=s.replace(/%PINES_CODE%/g,trunc(params.lib.shortname()));}
73                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
74
75                 try{s=s.replace(/%PATRON_LASTNAME%/g,trunc(params.au.family_name()));}
76                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
77                 try{s=s.replace(/%PATRON_FIRSTNAME%/g,trunc(params.au.first_given_name()));}
78                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
79                 try{s=s.replace(/%PATRON_MIDDLENAME%/g,trunc(params.au.second_given_name()));}
80                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
81                 try{s=s.replace(/%PATRON_BARCODE%/g,trunc(params.au.card().barcode()));}
82                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
83
84                 try{s=s.replace(/%STAFF_LASTNAME%/g,trunc(params.staff.family_name()));}
85                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
86                 try{s=s.replace(/%STAFF_FIRSTNAME%/g,trunc(params.staff.first_given_name()));}
87                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
88                 try{s=s.replace(/%STAFF_MIDDLENAME%/g,trunc(params.staff.second_given_name()));}
89                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
90                 try{s=s.replace(/%STAFF_BARCODE%/g,trunc(params.staff.card().barcode()));}
91                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
92
93                 try{s=s.replace(/%TODAY%/g,trunc(new Date()));}
94                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
95                 try{s=s.replace(/%TODAY_m%/g,trunc(formatted_date(new Date(),'%m')));}
96                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
97                 try{s=s.replace(/%TODAY_d%/g,trunc(formatted_date(new Date(),'%d')));}
98                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
99                 try{s=s.replace(/%TODAY_Y%/g,trunc(formatted_date(new Date(),'%Y')));}
100                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
101                 try{s=s.replace(/%TODAY_H%/g,trunc(formatted_date(new Date(),'%H')));}
102                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
103                 try{s=s.replace(/%TODAY_I%/g,trunc(formatted_date(new Date(),'%I')));}
104                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
105                 try{s=s.replace(/%TODAY_M%/g,trunc(formatted_date(new Date(),'%M')));}
106                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
107                 try{s=s.replace(/%TODAY_D%/g,trunc(formatted_date(new Date(),'%D')));}
108                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
109                 try{s=s.replace(/%TODAY_F%/g,trunc(formatted_date(new Date(),'%F')));}
110                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
111                 
112                 try{s=s.replace(/%OUT%/g,trunc(params.current_circ.xact_start()));}
113                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
114                 try{s=s.replace(/%OUT_m%/g,trunc(formatted_date(params.current_circ.xact_start(),'%m')));}
115                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
116                 try{s=s.replace(/%OUT_d%/g,trunc(formatted_date(params.current_circ.xact_start(),'%d')));}
117                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
118                 try{s=s.replace(/%OUT_Y%/g,trunc(formatted_date(params.current_circ.xact_start(),'%Y')));}
119                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
120                 try{s=s.replace(/%OUT_H%/g,trunc(formatted_date(params.current_circ.xact_start(),'%H')));}
121                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
122                 try{s=s.replace(/%OUT_I%/g,trunc(formatted_date(params.current_circ.xact_start(),'%I')));}
123                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
124                 try{s=s.replace(/%OUT_M%/g,trunc(formatted_date(params.current_circ.xact_start(),'%M')));}
125                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
126                 try{s=s.replace(/%OUT_D%/g,trunc(formatted_date(params.current_circ.xact_start(),'%D')));}
127                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
128                 try{s=s.replace(/%OUT_F%/g,trunc(formatted_date(params.current_circ.xact_start(),'%F')));}
129                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
130
131                 try{s=s.replace(/%DUE%/g,trunc(params.current_circ.due_date()));}
132                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
133                 try{s=s.replace(/%DUE_m%/g,trunc(formatted_date(params.current_circ.due_date(),'%m')));}
134                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
135                 try{s=s.replace(/%DUE_d%/g,trunc(formatted_date(params.current_circ.due_date(),'%d')));}
136                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
137                 try{s=s.replace(/%DUE_Y%/g,trunc(formatted_date(params.current_circ.due_date(),'%Y')));}
138                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
139                 try{s=s.replace(/%DUE_H%/g,trunc(formatted_date(params.current_circ.due_date(),'%H')));}
140                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
141                 try{s=s.replace(/%DUE_I%/g,trunc(formatted_date(params.current_circ.due_date(),'%I')));}
142                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
143                 try{s=s.replace(/%DUE_M%/g,trunc(formatted_date(params.current_circ.due_date(),'%M')));}
144                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
145                 try{s=s.replace(/%DUE_D%/g,trunc(formatted_date(params.current_circ.due_date(),'%D')));}
146                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
147                 try{s=s.replace(/%DUE_F%/g,trunc(formatted_date(params.current_circ.due_date(),'%F')));}
148                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
149
150                 try{s=s.replace(/%DURATION%/g,trunc(params.current_circ.duration()));}
151                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
152                 
153                 try{s=s.replace(/%COPY_BARCODE%/g,trunc(params.current_copy.barcode()));}
154                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
155                 
156                 var tb = s.match( /%TITLE:?\s*(\d*)%/ );
157                 if (tb) params.title_truncate = tb[1];
158
159                 try{s=s.replace(/%TITLE:?\s*\d*%/g,ttrunc(params.current_mvr.title()));}
160                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
161
162                 var ab = s.match( /%AUTHOR:?\s*(\d*)%/ );
163                 if (ab) params.author_truncate = ab[1];
164
165                 try{s=s.replace(/%AUTHOR%/g,atrunc(params.current_mvr.author()));}
166                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
167                 try{s=s.replace(/%PUBLISHER%/g,trunc(params.current_mvr.publisher()));}
168                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
169                 try{s=s.replace(/%PUBDATE%/g,trunc(params.current_mvr.pubdate()));}
170                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
171
172                 try{s=s.replace(/%NUMBER%/g,(params.current_index+1));}
173                         catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
174
175                 return s;
176 }
177
178 // Lower-level
179
180 function sPrint(s) {
181         sdump('D_PRINT',arg_dump(arguments));
182         var w = new_window('data:text/html,<html>' + s + '</html>\r\n', { 'window_name':'LastPrint' });
183         setTimeout(
184                 function() {
185                         w.minimize(); mw.minimize();
186                         this.focus();
187                         NSPrint(w);
188                         w.minimize(); mw.minimize();
189                         w.close();
190                         this.focus();
191                 },0
192         );
193 }
194
195 function NSPrint(w)
196 {
197         sdump('D_PRINT',arg_dump(arguments));
198         if (!w) { w = this; }
199         try {
200                 var webBrowserPrint = w
201                         .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
202                         .getInterface(Components.interfaces.nsIWebBrowserPrint);
203                 if (webBrowserPrint) {
204                         var gPrintSettings = GetPrintSettings();
205                         gPrintSettings.printSilent = true;
206                         /*
207                         gPrintSettings.marginTop = 0;
208                         gPrintSettings.marginLeft = 0;
209                         gPrintSettings.marginBottom = 0;
210                         gPrintSettings.marginRight = 0;
211                         */
212                         gPrintSettings.headerStrLeft = '';
213                         gPrintSettings.headerStrCenter = '';
214                         gPrintSettings.headerStrRight = '';
215                         gPrintSettings.footerStrLeft = '';
216                         gPrintSettings.footerStrCenter = '';
217                         gPrintSettings.footerStrRight = '';
218                         webBrowserPrint.print(gPrintSettings, null);
219                         //alert('Should be printing\n');
220                 } else {
221                         //alert('Should not be printing\n');
222                 }
223         } catch (e) {
224                 //alert('Probably not printing: ' + e);
225         // Pressing cancel is expressed as an NS_ERROR_ABORT return value,
226         // causing an exception to be thrown which we catch here.
227         // Unfortunately this will also consume helpful failures, so add a
228                 sdump('D_PRINT','PRINT EXCEPTION: ' + js2JSON(e) + '\n'); // if you need to debug
229         }
230 }
231
232 var gPrintSettings = null;
233
234 function GetPrintSettings()
235  {
236         sdump('D_PRINT',arg_dump(arguments));
237    try {
238      if (gPrintSettings == null) {
239        var pref = Components.classes["@mozilla.org/preferences-service;1"]
240                             .getService(Components.interfaces.nsIPrefBranch);
241        if (pref) {
242          gPrintSettingsAreGlobal = pref.getBoolPref("print.use_global_printsettings", false);
243          gSavePrintSettings = pref.getBoolPref("print.save_print_settings", false);
244        }
245  
246        var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
247                                          .getService(Components.interfaces.nsIPrintSettingsService);
248        if (gPrintSettingsAreGlobal) {
249          gPrintSettings = printService.globalPrintSettings;
250          setPrinterDefaultsForSelectedPrinter(printService);
251        } else {
252          gPrintSettings = printService.newPrintSettings;
253        }
254      }
255    } catch (e) {
256      sdump('D_PRINT',"GetPrintSettings() "+e+"\n");
257      alert("GetPrintSettings() "+e+"\n");
258    }
259  
260    return gPrintSettings;
261  }
262
263 function setPrinterDefaultsForSelectedPrinter(aPrintService)
264  {
265         sdump('D_PRINT',arg_dump(arguments));
266    if (gPrintSettings.printerName == "") {
267      gPrintSettings.printerName = aPrintService.defaultPrinterName;
268    }
269  
270    // First get any defaults from the printer 
271    aPrintService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
272  
273    // now augment them with any values from last time
274    aPrintService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSettings.kInitSaveAll);
275  }
276