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