1 load_lib('circ/circ_lib.js');
2 log_debug('loading circ_item_config.js ...');
14 008 Book with diskette
16 010 Book with audio tape
19 /* -----------------------------------------------------------------------------
20 Configure the duration rules for the various item types and circ modifiers
22 MARC Fixed Field info:
23 http://www.oclc.org/bibformats/en/fixedfield/
25 ----------------------------------------------------------------------------- */
27 var MARC_ITEM_TYPE_MAP = {
29 a : { /* Language material [Books] */
32 durationRule : '14_days_2_renew',
33 recurringFinesRule : '10_cent_per_day',
34 maxFine : 'overdue_mid'
37 t : { /* Manuscript language material [Books] */
40 durationRule : '14_days_2_renew',
41 recurringFinesRule : '10_cent_per_day',
42 maxFine : 'overdue_mid'
45 g : { /* Projected medium [Videos, etc.] */
48 durationRule : '7_days_0_renew',
49 recurringFinesRule : '50_cent_per_day',
50 maxFine : 'overdue_mid'
53 k : { /* Two-dimensional nonprojectable graphic [Card, charts, etc.] */
56 durationRule : '3_month_0_renew',
57 recurringFinesRule : '10_cent_per_day',
58 maxFine : 'overdue_mid'
61 r : { /* Three-dimensional artifact or naturally occurring object [Models, games, etc.] */
64 durationRule : '14_days_2_renew',
65 recurringFinesRule : '10_cent_per_day',
66 maxFine : 'overdue_mid'
69 o : { /* Kit [Mixture of item types] */
72 durationRule : '14_days_2_renew',
73 recurringFinesRule : '10_cent_per_day',
74 maxFine : 'overdue_mid'
77 p : { /* Mixed materials [Mixture of item types] */
80 durationRule : '14_days_2_renew',
81 recurringFinesRule : '10_cent_per_day',
82 maxFine : 'overdue_mid'
85 e : { /* Cartographic material [Map] */
88 durationRule : '7_days_2_renew',
89 recurringFinesRule : '50_cent_per_day',
90 maxFine : 'overdue_mid'
93 f : { /* Manuscript cartographic material [Map] */
96 durationRule : '3_days_1_renew',
97 recurringFinesRule : '50_cent_per_day',
98 maxFine : 'overdue_mid'
101 c : { /* Notated music [Printed music] */
102 SIPMediaType : '001',
104 durationRule : '14_days_2_renew',
105 recurringFinesRule : '10_cent_per_day',
106 maxFine : 'overdue_mid'
109 d : { /* Manuscript notated music [Printed music] */
110 SIPMediaType : '001',
112 durationRule : '14_days_2_renew',
113 recurringFinesRule : '10_cent_per_day',
114 maxFine : 'overdue_mid'
117 i : { /* Nonmusical sound recording [Audiobooks, sound effects, etc.] */
118 SIPMediaType : '001',
120 durationRule : '14_days_2_renew',
121 recurringFinesRule : '10_cent_per_day',
122 maxFine : 'overdue_mid'
125 j : { /* Musical sound recording [Music] */
126 SIPMediaType : '001',
128 durationRule : '14_days_2_renew',
129 recurringFinesRule : '10_cent_per_day',
130 maxFine : 'overdue_mid'
133 m : { /* Computer file */
134 SIPMediaType : '001',
136 durationRule : '14_days_2_renew',
137 recurringFinesRule : '10_cent_per_day',
138 maxFine : 'overdue_mid'
146 SIPMediaType : '000',
148 durationRule : '3_month_1_renew',
149 recurringFinesRule : '10_cent_per_day',
150 maxFine : 'overdue_mid'
154 SIPMediaType : '000',
156 durationRule : '7_days_2_renew',
157 recurringFinesRule : '50_cent_per_day',
158 maxFine : 'overdue_mid'
162 SIPMediaType : '004',
164 durationRule : '14_days_2_renew',
165 recurringFinesRule : '10_cent_per_day',
166 maxFine : 'overdue_mid'
170 SIPMediaType : '005',
172 durationRule : '7_days_2_renew',
173 recurringFinesRule : '50_cent_per_day',
174 maxFine : 'overdue_mid'
178 SIPMediaType : '005',
180 durationRule : '3_days_1_renew',
181 recurringFinesRule : '50_cent_per_day',
182 maxFine : 'overdue_mid'
186 SIPMediaType : '001',
188 durationRule : '7_days_2_renew',
189 recurringFinesRule : '50_cent_per_day',
190 maxFine : 'overdue_mid'
194 SIPMediaType : '001',
196 durationRule : '7_days_2_renew',
197 recurringFinesRule : '50_cent_per_day',
198 maxFine : 'overdue_mid'
202 SIPMediaType : '001',
204 durationRule : '14_days_2_renew',
205 recurringFinesRule : '10_cent_per_day',
206 maxFine : 'overdue_mid'
210 SIPMediaType : '006',
212 durationRule : '14_days_2_renew',
213 recurringFinesRule : '10_cent_per_day',
214 maxFine : 'overdue_mid'
218 SIPMediaType : '006',
220 durationRule : '7_days_0_renew',
221 recurringFinesRule : '50_cent_per_day',
222 maxFine : 'overdue_mid'
226 SIPMediaType : '006',
228 durationRule : '14_days_2_renew',
229 recurringFinesRule : '10_cent_per_day',
230 maxFine : 'overdue_mid'
234 SIPMediaType : '001',
236 durationRule : '3_days_1_renew',
237 recurringFinesRule : '50_cent_per_day',
238 maxFine : 'overdue_mid'
242 SIPMediaType : '000',
244 durationRule : '1_day_0_renew', /* make me 1 day, 0 renewal when possible */
245 recurringFinesRule : '50_cent_per_day',
246 maxFine : 'overdue_mid'
250 SIPMediaType : '000',
252 durationRule : '3_days_1_renew',
253 recurringFinesRule : '50_cent_per_day',
254 maxFine : 'overdue_mid'
258 SIPMediaType : '000',
260 durationRule : '14_days_2_renew',
261 recurringFinesRule : '10_cent_per_day',
262 maxFine : 'overdue_mid'
266 SIPMediaType : '000',
268 durationRule : '14_days_2_renew',
269 recurringFinesRule : '10_cent_per_day',
270 maxFine : 'overdue_mid'
274 SIPMediaType : '002',
276 durationRule : '14_days_2_renew',
277 recurringFinesRule : '10_cent_per_day',
278 maxFine : 'overdue_mid'
282 SIPMediaType : '000',
284 durationRule : '3_days_1_renew',
285 recurringFinesRule : '50_cent_per_day',
286 maxFine : 'overdue_mid'
290 SIPMediaType : '000',
292 durationRule : '14_days_2_renew',
293 recurringFinesRule : '10_cent_per_day',
294 maxFine : 'overdue_mid'
298 SIPMediaType : '004',
300 durationRule : '14_days_2_renew',
301 recurringFinesRule : '10_cent_per_day',
302 maxFine : 'overdue_mid'
306 SIPMediaType : '000',
308 durationRule : '14_days_2_renew',
309 recurringFinesRule : '10_cent_per_day',
310 maxFine : 'overdue_mid'
314 SIPMediaType : '006',
316 durationRule : '7_days_2_renew',
317 recurringFinesRule : '10_cent_per_day',
318 maxFine : 'overdue_mid'
322 SIPMediaType : '006',
324 durationRule : '14_days_2_renew',
325 recurringFinesRule : '10_cent_per_day',
326 maxFine : 'overdue_mid'
330 SIPMediaType : '006',
332 durationRule : 'unlimited',
336 SIPMediaType : '000',
338 durationRule : '14_days_2_renew',
339 recurringFinesRule : '10_cent_per_day',
340 maxFine : 'overdue_mid'
344 SIPMediaType : '005',
346 durationRule : '7_days_0_renew',
347 recurringFinesRule : '50_cent_per_day',
348 maxFine : 'overdue_mid'
352 SIPMediaType : '005',
354 durationRule : '14_days_2_renew',
355 recurringFinesRule : '10_cent_per_day',
356 maxFine : 'overdue_mid'
360 SIPMediaType : '001',
362 durationRule : '7_days_2_renew',
363 recurringFinesRule : '10_cent_per_day',
364 maxFine : 'overdue_mid'
370 /* Set up rules for legacy types */
371 CIRC_MOD_MAP['DEPOSIT'] = CIRC_MOD_MAP['book'];
372 CIRC_MOD_MAP['E-AUDIO'] = CIRC_MOD_MAP['book'];
373 CIRC_MOD_MAP['FACNEWBK'] = CIRC_MOD_MAP['book'];
374 CIRC_MOD_MAP['MAG-CIRC'] = CIRC_MOD_MAP['book'];
375 CIRC_MOD_MAP['MAG-NOCIRC'] = CIRC_MOD_MAP['book'];
376 CIRC_MOD_MAP['NEW-BOOK'] = CIRC_MOD_MAP['book'];
377 CIRC_MOD_MAP['NEWSPAPER'] = CIRC_MOD_MAP['book'];
378 CIRC_MOD_MAP['OUTREACH'] = CIRC_MOD_MAP['book'];
379 CIRC_MOD_MAP['PAMPHLET'] = CIRC_MOD_MAP['book'];
380 CIRC_MOD_MAP['PAPERBACK'] = CIRC_MOD_MAP['book'];
381 CIRC_MOD_MAP['RESERVE'] = CIRC_MOD_MAP['book'];
382 CIRC_MOD_MAP['STATE-BOOK'] = {
383 SIPMediaType : '001',
385 durationRule : '35_days_1_renew',
386 recurringFinesRule : "10_cent_per_day",
387 maxFine : "overdue_mid"
389 CIRC_MOD_MAP['STATE-MFRM'] = {
390 SIPMediaType : '001',
392 durationRule : '14_days_2_renew',
393 recurringFinesRule : "10_cent_per_day",
394 maxFine : "overdue_mid"
400 /* this will set defaults even if no one asked for them */
401 log_debug("Calling getItemConfig() to force defaults..");
403 log_debug("getItemConfig() set magneticMedia to "+result.magneticMedia);
406 function getItemConfig() {
408 /* -----------------------------------------------------------------------------------
409 If a circ_modifier is defined on the copy and we have config info for the
410 provided circ_modifier, use that config. Otherwise fall back on the MARC item type
411 ----------------------------------------------------------------------------------- */
412 var marcType = getMARCItemType();
413 var itemForm = (marcXMLDoc) ? extractFixedField(marcXMLDoc,'Form') : "";
414 //var circMod = (copy.circ_modifier) ? copy.circ_modifier.toLowerCase() : '';
415 var circMod = copy.circ_modifier;
420 config = CIRC_MOD_MAP[circMod];
422 config = CIRC_MOD_MAP[circMod.toLowerCase()]
424 log_info("a circ_mod config exists for the copy with mod: " + circMod);
428 /* otherwise, fall back on the MARC item type */
430 log_info("no circ_mod config found for " +circMod+", falling back to MARC");
431 config = MARC_ITEM_TYPE_MAP[marcType];
434 /* if no config could be found, default to 'book' */
436 log_warn("item_config found no circ_mod OR MARC config, defaulting to 'book'");
437 config = CIRC_MOD_MAP['book'];
440 config.maxFine = setMaxFineByCircLocation();
442 /* go ahead and set some default result
443 data (which may be overidden) */
444 for( var i in config ) {
445 log_debug("item_config setting result defaults: "+i+" = " +config[i]);
446 result[i] = config[i];
453 function setMaxFineByCircLocation() {
454 var max_libs = [ 'ARL', 'DTRL', 'SJRLS' ];
455 var mid_libs = [ 'CHRL', 'ECGR', 'FRRLS', 'HCLS', 'OCRL', 'OHOOP', 'OKRL', 'PMRLS', 'PPL', 'STRL' ];
457 var cl = (volume && volume.id != -1) ? volume.owning_lib : currentLocation.id;
460 for( var i = 0; i < max_libs.length; i++ ) {
461 var org = max_libs[i];
462 if( isOrgDescendent(org, cl) ) {
463 log_debug("found max-fine ancestor org "+org);
464 max_fine = 'overdue_max';
470 for( var i = 0; i < mid_libs.length; i++ ) {
471 var org = mid_libs[i];
472 if( isOrgDescendent(org, cl) ) {
473 log_debug("found mid-fine ancestor org "+org);
474 max_fine = 'overdue_mid';
480 if(!max_fine) max_fine = 'overdue_min';
482 log_info("setMaxFineByCircLocation() set max_fine to "+ max_fine);