1 sdump('D_TRACE','Loading print.js\n');
3 var print_crlf = '<br />\r\n';
7 function print_itemsout_receipt(params,sample_view) {
8 print_circ_receipt('itemsout',params,sample_view);
11 function print_checkout_receipt(params,sample_view) {
12 print_circ_receipt('checkout',params,sample_view);
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); }
21 case 'itemsout' : circs = params.au.checkouts(); break;
22 case 'checkout' : circs = params.au._current_checkouts; break;
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);
31 if (params.footer) { s += print_template_replace(params.footer, params); }
32 s = s.replace( /\n/g, print_crlf );
34 sample_view.setAttribute( 'src', 'data:text/html,<html>' + s + '</html>\r\n' );
40 function print_template_replace(s,params) {
43 if (params.truncate) {
45 return t.toString().substr(0,params.truncate);
54 if (params.title_truncate) {
56 return t.toString().substr(0,params.title_truncate);
65 if (params.author_truncate) {
67 return t.toString().substr(0,params.author_truncate);
78 var b = s.match( /%TRUNC.{0,3}:\s*(\d+)%/ );
79 if (b) params.truncate = b[1];
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');}
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');}
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');}
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');}
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');}
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');}
163 try{s=s.replace(/%DURATION%/g,trunc(params.current_circ.duration()));}
164 catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
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');}
169 var tb = s.match( /%TITLE:?\s*(\d*)%/ );
170 if (tb) params.title_truncate = tb[1];
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');}
175 var ab = s.match( /%AUTHOR:?\s*(\d*)%/ );
176 if (ab) params.author_truncate = ab[1];
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');}
185 try{s=s.replace(/%NUMBER%/g,(params.current_index+1));}
186 catch(E){sdump('D_ERROR','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
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();
199 NSPrint(w); w.minimize(); w.close(); mw.minimize();
206 sdump('D_PRINT',arg_dump(arguments));
207 if (!w) { w = this; }
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;
216 gPrintSettings.marginTop = 0;
217 gPrintSettings.marginLeft = 0;
218 gPrintSettings.marginBottom = 0;
219 gPrintSettings.marginRight = 0;
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');
230 //alert('Should not be printing\n');
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
241 var gPrintSettings = null;
243 function GetPrintSettings()
245 sdump('D_PRINT',arg_dump(arguments));
247 if (gPrintSettings == null) {
248 var pref = Components.classes["@mozilla.org/preferences-service;1"]
249 .getService(Components.interfaces.nsIPrefBranch);
251 gPrintSettingsAreGlobal = pref.getBoolPref("print.use_global_printsettings", false);
252 gSavePrintSettings = pref.getBoolPref("print.save_print_settings", false);
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);
261 gPrintSettings = printService.newPrintSettings;
265 sdump('D_PRINT',"GetPrintSettings() "+e+"\n");
266 alert("GetPrintSettings() "+e+"\n");
269 return gPrintSettings;
272 function setPrinterDefaultsForSelectedPrinter(aPrintService)
274 sdump('D_PRINT',arg_dump(arguments));
275 if (gPrintSettings.printerName == "") {
276 gPrintSettings.printerName = aPrintService.defaultPrinterName;
279 // First get any defaults from the printer
280 aPrintService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
282 // now augment them with any values from last time
283 aPrintService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSettings.kInitSaveAll);