/* -----------------------------------------------------------------------------
Configure the duration rules for the various item types and circ modifiers
-
MARC Fixed Field info:
http://www.oclc.org/bibformats/en/fixedfield/
-
----------------------------------------------------------------------------- */
var MARC_ITEM_TYPE_MAP = {
-
a : { /* Language material [Books] */
SIPMediaType : '001',
magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- t : { /* Manuscript language material [Books] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- g : { /* Projected medium [Videos, etc.] */
- SIPMediaType : '005',
- magneticMedia : 'f',
- durationRule : '7_days_0_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- k : { /* Two-dimensional nonprojectable graphic [Card, charts, etc.] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '3_month_0_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- r : { /* Three-dimensional artifact or naturally occurring object [Models, games, etc.] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- o : { /* Kit [Mixture of item types] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- p : { /* Mixed materials [Mixture of item types] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- e : { /* Cartographic material [Map] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '7_days_2_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- f : { /* Manuscript cartographic material [Map] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '3_days_1_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- c : { /* Notated music [Printed music] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- d : { /* Manuscript notated music [Printed music] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- i : { /* Nonmusical sound recording [Audiobooks, sound effects, etc.] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- j : { /* Musical sound recording [Music] */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
+ durationRule : 'default'
+ recurringFinesRule : 'default'
+ maxFine : 'default'
},
-
- m : { /* Computer file */
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- }
+ /* add more MARC item type configs as needed... */
}
+/* make 't' and 'a' share the same config info */
+MARC_ITEM_TYPE_MAP.t = MARC_ITEM_TYPE_MAP.a;
-var CIRC_MOD_MAP = {
-
- 'art' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '3_month_1_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'atlas' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '7_days_2_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'audiobook' : {
- SIPMediaType : '004',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'av' : {
- SIPMediaType : '005',
- magneticMedia : 'f',
- durationRule : '7_days_2_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'new-av' : {
- SIPMediaType : '005',
- magneticMedia : 'f',
- durationRule : '3_days_1_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
+var CIRC_MOD_MAP = {
'bestseller' : {
SIPMediaType : '001',
magneticMedia : 'f',
- durationRule : '7_days_2_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'bestsellernh' : {
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '7_days_2_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'book' : {
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
+ durationRule : 'default'
+ recurringFinesRule : 'default'
+ maxFine : 'default'
},
-
- 'cd' : {
- SIPMediaType : '006',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'dvd' : {
- SIPMediaType : '006',
- magneticMedia : 'f',
- durationRule : '7_days_0_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'dvd-long' : {
- SIPMediaType : '006',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'e-book' : {
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '3_days_1_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'equipment' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '1_day_0_renew', /* make me 1 day, 0 renewal when possible */
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'equip-long' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '3_days_1_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'filmstrip' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'kit' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'magazine' : {
- SIPMediaType : '002',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'map' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '3_days_1_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'microform' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'music' : {
- SIPMediaType : '004',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'record' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'software' : {
- SIPMediaType : '006',
- magneticMedia : 'f',
- durationRule : '7_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'softwrlong' : {
- SIPMediaType : '006',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'talking book' : {
- SIPMediaType : '006',
- magneticMedia : 'f',
- durationRule : 'unlimited',
- },
-
- 'toy' : {
- SIPMediaType : '000',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'video' : {
- SIPMediaType : '005',
- magneticMedia : 'f',
- durationRule : '7_days_0_renew',
- recurringFinesRule : '50_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'video-long' : {
- SIPMediaType : '005',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
- 'facbestslr' : {
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '7_days_2_renew',
- recurringFinesRule : '10_cent_per_day',
- maxFine : 'overdue_mid'
- },
-
}
-/* Set up rules for legacy types */
-CIRC_MOD_MAP['DEPOSIT'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['E-AUDIO'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['FACNEWBK'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['MAG-CIRC'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['MAG-NOCIRC'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['NEW-BOOK'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['NEWSPAPER'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['OUTREACH'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['PAMPHLET'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['PAPERBACK'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['RESERVE'] = CIRC_MOD_MAP['book'];
-CIRC_MOD_MAP['STATE-BOOK'] = {
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '35_days_1_renew',
- recurringFinesRule : "10_cent_per_day",
- maxFine : "overdue_mid"
-};
-CIRC_MOD_MAP['STATE-MFRM'] = {
- SIPMediaType : '001',
- magneticMedia : 'f',
- durationRule : '14_days_2_renew',
- recurringFinesRule : "10_cent_per_day",
- maxFine : "overdue_mid"
-};
-
-
-
-
/* this will set defaults even if no one asked for them */
log_debug("Calling getItemConfig() to force defaults..");
getItemConfig();
-log_debug("getItemConfig() set magneticMedia to "+result.magneticMedia);
function getItemConfig() {
- /* -----------------------------------------------------------------------------------
- If a circ_modifier is defined on the copy and we have config info for the
- provided circ_modifier, use that config. Otherwise fall back on the MARC item type
- ----------------------------------------------------------------------------------- */
+ var config = null;
var marcType = getMARCItemType();
- var itemForm = (marcXMLDoc) ? extractFixedField(marcXMLDoc,'Form') : "";
- //var circMod = (copy.circ_modifier) ? copy.circ_modifier.toLowerCase() : '';
var circMod = copy.circ_modifier;
-
- var config = null;
- if( circMod ) {
- config = CIRC_MOD_MAP[circMod];
- if(!config)
- config = CIRC_MOD_MAP[circMod.toLowerCase()]
- if(config)
- log_info("a circ_mod config exists for the copy with mod: " + circMod);
- }
+ if( circMod ) {
+ config = CIRC_MOD_MAP[circMod];
+ if(!config)
+ config = CIRC_MOD_MAP[circMod.toLowerCase()]
+ }
- if(!config) {
- /* otherwise, fall back on the MARC item type */
- if( circMod )
- log_info("no circ_mod config found for " +circMod+", falling back to MARC");
+ if(!config)
config = MARC_ITEM_TYPE_MAP[marcType];
- }
-
- /* if no config could be found, default to 'book' */
- if(!config) {
- log_warn("item_config found no circ_mod OR MARC config, defaulting to 'book'");
- config = CIRC_MOD_MAP['book'];
- }
-
- config.maxFine = setMaxFineByCircLocation();
- /* go ahead and set some default result
- data (which may be overidden) */
- for( var i in config ) {
- log_debug("item_config setting result defaults: "+i+" = " +config[i]);
- result[i] = config[i];
- }
+ if(!config) {
+ config = {};
+ config.SIPMediaType = '001';
+ config.magneticMedia = 'f';
+ config.durationRule = 'default';
+ config.recurringFinesRule = 'default';
+ config.maxFine = 'default';
+ }
- return config;
+ return config
}
-function setMaxFineByCircLocation() {
- var max_libs = [ 'ARL', 'DTRL', 'SJRLS' ];
- var mid_libs = [ 'CHRL', 'ECGR', 'FRRLS', 'HCLS', 'OCRL', 'OHOOP', 'OKRL', 'PMRLS', 'PPL', 'STRL' ];
-
- var cl = (volume && volume.id != -1) ? volume.owning_lib : currentLocation.id;
- var max_fine = null;
-
- for( var i = 0; i < max_libs.length; i++ ) {
- var org = max_libs[i];
- if( isOrgDescendent(org, cl) ) {
- log_debug("found max-fine ancestor org "+org);
- max_fine = 'overdue_max';
- break;
- }
- }
- if(!max_fine) {
- for( var i = 0; i < mid_libs.length; i++ ) {
- var org = mid_libs[i];
- if( isOrgDescendent(org, cl) ) {
- log_debug("found mid-fine ancestor org "+org);
- max_fine = 'overdue_mid';
- break;
- }
- }
- }
-
- if(!max_fine) max_fine = 'overdue_min';
-
- log_info("setMaxFineByCircLocation() set max_fine to "+ max_fine);
-
- return max_fine;
-}
var isPrecat = environment.isPrecat;
var currentLocation = environment.location;
var holdRequestLib = environment.requestLib;
+var holdPickupLib = environment.pickupLib; /* hold pickup lib */
function getMARCItemType() {
-
if( copy &&
copy.circ_as_type &&
copy.circ_as_type != 'undef' )
-/*
-- at some point we should add a library of objects that map
-codes to names (item_form, item_type, etc.)
-load_lib('item_form_map.js');
-var form_name = item_form_map[env.record_descriptor.item_form];
-*/
-
-
-
/* logs a load of info */
function log_vars( prefix ) {
var str = prefix + ' : ';
if(patron) {
str += ' Patron=' + patron.id;
str += ', Patron_Username='+ patron.usrname;
- str += ', Patron_Profile Group='+ patronProfile;
+ str += ', Patron_Profile_Group='+ patronProfile;
str += ', Patron_Fines=' + patronFines;
str += ', Patron_OverdueCount=' + patronOverdueCount;
- str += ', Patron_Items Out=' + patronItemsOut;
+ str += ', Patron_Items_Out=' + patronItemsOut;
try {
str += ', Patron_Barcode=' + patron.card.barcode;
} catch(e) {}
}
- if(volume) str += ', Volume=' + volume.id;
- if(title) str += ', Record=' + title.id;
+ if(volume) {
+ str += ', Item_Owning_lib=' + volume.owning_lib;
+ str += ', Volume=' + volume.id;
+ }
+
+ if(title) str += ', Record=' + title.id;
if(recDescriptor) {
str += ', Record_Descriptor=' + recDescriptor.id;
str += ', Is_Renewal: ' + ( (isTrue(isRenewal)) ? "yes" : "no" );
str += ', Is_Precat: ' + ( (isTrue(isPrecat)) ? "yes" : "no" );
str += (holdRequestLib) ? ', Hold_request_lib=' + holdRequestLib.shortname : '';
+ str += (holdPickupLib) ? ', Hold_Pickup_Lib=' + holdPickupLib : '';
log_info(str);
}
+
+/**
+ * Returns config information for the requested group. If
+ * no config info exists for the requested group, then this
+ * function searches up the tree to find the config info
+ * for the nearest ancestor
+ * @param The name of the group who's config info to return
+ */
+function findGroupConfig(name) {
+ if(!name) return null;
+ var node = groupList[name];
+ do {
+ if( GROUP_CONFIG[node.name] ) {
+ debugGroupConfig(name, node.name, GROUP_CONFIG[node.name]);
+ return GROUP_CONFIG[node.name];
+ }
+ } while( (node = groupIDList[node.parent]) );
+ return null;
+}
+
+
+/** prints out the settings for the given group config **/
+function debugGroupConfig(name, foundName, config) {
+ if(!config) return;
+ var str = "findGroupConfig('"+name+"'): returning config info for '"+ foundName +"': ";
+ for( var i in config )
+ str += i + '=' + config[i] + ' ';
+ log_debug(str);
+}
+
+