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