]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/util/print.js
more receipt templating
[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_checkout_receipt(params) {
8         sdump('D_PRINT',arg_dump(arguments));
9         var s = '';
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,'');}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
65                 try{s=s.replace(/%LIBRARY%/g,trunc(params.lib.name()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
66                 try{s=s.replace(/%PINES_CODE%/g,trunc(params.lib.shortname()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
67
68                 try{s=s.replace(/%PATRON_LASTNAME%/g,trunc(params.au.family_name()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
69                 try{s=s.replace(/%PATRON_FIRSTNAME%/g,trunc(params.au.first_given_name()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
70                 try{s=s.replace(/%PATRON_MIDDLENAME%/g,trunc(params.au.second_given_name()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
71                 try{s=s.replace(/%PATRON_BARCODE%/g,trunc(params.au.card().barcode()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
72
73                 try{s=s.replace(/%TODAY%/g,trunc(new Date()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
74                 try{s=s.replace(/%TODAY_m%/g,trunc(formatted_date(new Date(),'%m')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
75                 try{s=s.replace(/%TODAY_d%/g,trunc(formatted_date(new Date(),'%d')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
76                 try{s=s.replace(/%TODAY_Y%/g,trunc(formatted_date(new Date(),'%Y')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
77                 try{s=s.replace(/%TODAY_H%/g,trunc(formatted_date(new Date(),'%H')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
78                 try{s=s.replace(/%TODAY_I%/g,trunc(formatted_date(new Date(),'%I')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
79                 try{s=s.replace(/%TODAY_M%/g,trunc(formatted_date(new Date(),'%M')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
80                 try{s=s.replace(/%TODAY_D%/g,trunc(formatted_date(new Date(),'%D')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
81                 try{s=s.replace(/%TODAY_F%/g,trunc(formatted_date(new Date(),'%F')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
82                 
83                 try{s=s.replace(/%OUT%/g,trunc(params.current_circ.xact_start()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
84                 try{s=s.replace(/%OUT_m%/g,trunc(formatted_date(params.current_circ.xact_start(),'%m')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
85                 try{s=s.replace(/%OUT_d%/g,trunc(formatted_date(params.current_circ.xact_start(),'%d')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
86                 try{s=s.replace(/%OUT_Y%/g,trunc(formatted_date(params.current_circ.xact_start(),'%Y')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
87                 try{s=s.replace(/%OUT_H%/g,trunc(formatted_date(params.current_circ.xact_start(),'%H')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
88                 try{s=s.replace(/%OUT_I%/g,trunc(formatted_date(params.current_circ.xact_start(),'%I')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
89                 try{s=s.replace(/%OUT_M%/g,trunc(formatted_date(params.current_circ.xact_start(),'%M')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
90                 try{s=s.replace(/%OUT_D%/g,trunc(formatted_date(params.current_circ.xact_start(),'%D')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
91                 try{s=s.replace(/%OUT_F%/g,trunc(formatted_date(params.current_circ.xact_start(),'%F')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
92
93                 try{s=s.replace(/%DUE%/g,trunc(params.current_circ.due_date()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
94                 try{s=s.replace(/%DUE_m%/g,trunc(formatted_date(params.current_circ.due_date(),'%m')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
95                 try{s=s.replace(/%DUE_d%/g,trunc(formatted_date(params.current_circ.due_date(),'%d')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
96                 try{s=s.replace(/%DUE_Y%/g,trunc(formatted_date(params.current_circ.due_date(),'%Y')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
97                 try{s=s.replace(/%DUE_H%/g,trunc(formatted_date(params.current_circ.due_date(),'%H')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
98                 try{s=s.replace(/%DUE_I%/g,trunc(formatted_date(params.current_circ.due_date(),'%I')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
99                 try{s=s.replace(/%DUE_M%/g,trunc(formatted_date(params.current_circ.due_date(),'%M')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
100                 try{s=s.replace(/%DUE_D%/g,trunc(formatted_date(params.current_circ.due_date(),'%D')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
101                 try{s=s.replace(/%DUE_F%/g,trunc(formatted_date(params.current_circ.due_date(),'%F')));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
102
103                 try{s=s.replace(/%DURATION%/g,trunc(params.current_circ.duration()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
104                 
105                 try{s=s.replace(/%COPY_BARCODE%/g,trunc(params.current_copy.barcode()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
106                 
107                 var tb = s.match( /%TITLE:?\s*(\d*)%/ );
108                 if (tb) params.title_truncate = tb[1];
109
110                 try{s=s.replace(/%TITLE:?\s*\d*%/g,ttrunc(params.current_mvr.title()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
111
112                 var ab = s.match( /%AUTHOR:?\s*(\d*)%/ );
113                 if (ab) params.author_truncate = ab[1];
114
115                 try{s=s.replace(/%AUTHOR%/g,atrunc(params.current_mvr.author()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
116                 try{s=s.replace(/%PUBLISHER%/g,trunc(params.current_mvr.publisher()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
117                 try{s=s.replace(/%PUBDATE%/g,trunc(params.current_mvr.pubdate()));}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
118
119                 try{s=s.replace(/%NUMBER%/g,params.current_index);}catch(E){sdump('D_ERROR',js2JSON(E)+'\n');}
120
121                 return s;
122 }
123
124 // Lower-level
125
126 function sPrint(s) {
127         sdump('D_PRINT',arg_dump(arguments));
128         var w = new_window('data:text/html,<html>' + s + '</html>\r\n', { 'window_name':'LastPrint' });
129         setTimeout(
130                 function() {
131                         w.minimize(); mw.minimize();
132                         this.focus();
133                         NSPrint(w);
134                         w.minimize(); mw.minimize();
135                         //w.close();
136                 },0
137         );
138 }
139
140 function NSPrint(w)
141 {
142         sdump('D_PRINT',arg_dump(arguments));
143         if (!w) { w = this; }
144         try {
145                 var webBrowserPrint = w
146                         .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
147                         .getInterface(Components.interfaces.nsIWebBrowserPrint);
148                 if (webBrowserPrint) {
149                         var gPrintSettings = GetPrintSettings();
150                         gPrintSettings.printSilent = true;
151                         gPrintSettings.marginTop = 0;
152                         gPrintSettings.marginLeft = 0;
153                         gPrintSettings.marginBottom = 0;
154                         gPrintSettings.marginRight = 0;
155                         gPrintSettings.headerStrLeft = '';
156                         gPrintSettings.headerStrCenter = '';
157                         gPrintSettings.headerStrRight = '';
158                         gPrintSettings.footerStrLeft = '';
159                         gPrintSettings.footerStrCenter = '';
160                         gPrintSettings.footerStrRight = '';
161                         webBrowserPrint.print(gPrintSettings, null);
162                         //alert('Should be printing\n');
163                 } else {
164                         //alert('Should not be printing\n');
165                 }
166         } catch (e) {
167                 //alert('Probably not printing: ' + e);
168         // Pressing cancel is expressed as an NS_ERROR_ABORT return value,
169         // causing an exception to be thrown which we catch here.
170         // Unfortunately this will also consume helpful failures, so add a
171                 sdump('D_PRINT','PRINT EXCEPTION: ' + js2JSON(e) + '\n'); // if you need to debug
172         }
173 }
174
175 var gPrintSettings = null;
176
177 function GetPrintSettings()
178  {
179         sdump('D_PRINT',arg_dump(arguments));
180    try {
181      if (gPrintSettings == null) {
182        var pref = Components.classes["@mozilla.org/preferences-service;1"]
183                             .getService(Components.interfaces.nsIPrefBranch);
184        if (pref) {
185          gPrintSettingsAreGlobal = pref.getBoolPref("print.use_global_printsettings", false);
186          gSavePrintSettings = pref.getBoolPref("print.save_print_settings", false);
187        }
188  
189        var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
190                                          .getService(Components.interfaces.nsIPrintSettingsService);
191        if (gPrintSettingsAreGlobal) {
192          gPrintSettings = printService.globalPrintSettings;
193          setPrinterDefaultsForSelectedPrinter(printService);
194        } else {
195          gPrintSettings = printService.newPrintSettings;
196        }
197      }
198    } catch (e) {
199      sdump('D_PRINT',"GetPrintSettings() "+e+"\n");
200      alert("GetPrintSettings() "+e+"\n");
201    }
202  
203    return gPrintSettings;
204  }
205
206 function setPrinterDefaultsForSelectedPrinter(aPrintService)
207  {
208         sdump('D_PRINT',arg_dump(arguments));
209    if (gPrintSettings.printerName == "") {
210      gPrintSettings.printerName = aPrintService.defaultPrinterName;
211    }
212  
213    // First get any defaults from the printer 
214    aPrintService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
215  
216    // now augment them with any values from last time
217    aPrintService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSettings.kInitSaveAll);
218  }
219