From a3ee3e31adf447522b16bff775428ec8cae0a4d8 Mon Sep 17 00:00:00 2001 From: dbs Date: Sat, 2 May 2009 13:20:49 +0000 Subject: [PATCH] First cut at OWA/OWAL circ rules git-svn-id: svn://svn.open-ils.org/ILS-Contrib/conifer/trunk@431 6d9bc8c9-1ec2-4278-b937-99fde70a366f --- circ/circ_duration.js | 8 + circ/circ_duration_OWA.js | 609 +++++++++++++++++++++++++++++++++ tools/migration-scripts/circ_rules.sql | 29 ++ 3 files changed, 646 insertions(+) create mode 100644 circ/circ_duration_OWA.js create mode 100644 tools/migration-scripts/circ_rules.sql diff --git a/circ/circ_duration.js b/circ/circ_duration.js index 137546d02e..2dcef53b14 100755 --- a/circ/circ_duration.js +++ b/circ/circ_duration.js @@ -4,6 +4,14 @@ load_lib('circ/circ_item_config.js'); load_lib('JSON_v1.js'); log_vars('circ_duration'); +/* load circ rules for specific institutions */ +var circ_duration_institution_file = 'circ/circ_duration_' + currentLocation.shortname + '.js'; +load_lib(circ_duration_institution_file); + +log_error(circ_duration_institution_file); + +/* if an institution specific script was loaded, then stop */ +if (result.durationRule) return; /* treat pre-cat copies like vanilla books */ if( isTrue(isPrecat) ) { diff --git a/circ/circ_duration_OWA.js b/circ/circ_duration_OWA.js new file mode 100644 index 0000000000..65ddaeaa73 --- /dev/null +++ b/circ/circ_duration_OWA.js @@ -0,0 +1,609 @@ +/* SIP media types +000 Other +001 Book +002 Magazine +003 Bound journal +004 Audio tape +005 Video tape +006 CD/CDROM +007 Diskette +008 Book with diskette +009 Book with CD +010 Book with audio tape +*/ + +/* set item type defaults - if the either the patron group or the circ modifier + is missing or invalid, these settings will be used */ + +// do these first two have any significance for us? +result.SIPMediaType = '001'; +result.magneticMedia = 'f'; + +// if result.durationRule is not modified for a patron group, item does not circulate +result.durationRule = 'non_circ'; + +// for fines, set the most common value here +result.recurringFinesRule = '50_cent_per_day'; +result.maxFine = '10_dollars'; + +/* adjust rules by patron group and circ modifier */ + +switch(patronProfile) { + + case 'Circulators': + result.durationRule = '120_days_2_renew'; + break; + + case 'Patrons': + switch(copy.circ_modifier) { + case 'cd music': + // use defaults + break; + case 'circ': + result.durationRule = '14_days_3_renew'; + break; + case 'circ short': + // use defaults + break; + case 'crc media': + result.durationRule = '7_days_3_renew'; + break; + case 'crc spec': + result.durationRule = '14_days_3_renew'; + break; + case 'crc text': + result.durationRule = '14_days_3_renew'; + break; + case 'dnon': + // use defaults + break; + case 'doc': + result.durationRule = '14_days_3_renew'; + break; + case 'dvd video': + result.durationRule = '3_days_1_renew'; + break; + case 'law mono': + // use defaults + break; + case 'law nocirc': + // use defaults + break; + case 'law res1d': + // use defaults + break; + case 'law res3d': + // use defaults + break; + case 'law res3h': + // use defaults + break; + case 'law res5h': + // use defaults + break; + case 'law serial': + // use defaults + break; + case 'map': + // use defaults + break; + case 'map (circulating)': + result.durationRule = '14_days_3_renew'; + break; + case 'map (reference)': + // use defaults + break; + case 'media': + result.durationRule = '14_days_3_renew'; + break; + case 'mform': + result.durationRule = '14_days_3_renew'; + break; + case 'mform ref': + // use defaults + break; + case 'mform ser': + // use defaults + break; + case 'ref': + result.durationRule = '7_days_3_renew'; + break; + case 'rsv1': + // use defaults + break; + case 'rsv2': + // use defaults + break; + case 'rsv3': + // use defaults + break; + case 'rsv7': + // use defaults + break; + case 'ser': + // use defaults + break; + case 'thesis': + result.durationRule = '14_days_3_renew'; + break; + } + break; + + case 'Faculty': + switch(copy.circ_modifier) { + case 'cd music': + result.durationRule = '3_days_1_renew'; + break; + case 'circ': + result.durationRule = '28_days_3_renew'; + break; + case 'circ short': + result.durationRule = '3_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'crc media': + result.durationRule = '7_days_3_renew'; + break; + case 'crc spec': + result.durationRule = '28_days_3_renew'; + break; + case 'crc text': + result.durationRule = '28_days_3_renew'; + break; + case 'dnon': + // use defaults + break; + case 'doc': + result.durationRule = '28_days_3_renew'; + break; + case 'dvd video': + result.durationRule = '3_days_1_renew'; + break; + + /* settings for law item types are those applicable to LAW FACLTY + and will need to be changed as soon as a conifer Law Faculty patron + group can be created */ + + case 'law mono': + result.durationRule = '28_days_5_renew'; + result.recurringFinesRule = 'free'; + result.maxFine = 0; + break; + case 'law nocirc': + result.durationRule = '14_days_5_renew'; + result.recurringFinesRule = 'free'; + result.maxFine = 0; + break; + case 'law res1d': + result.durationRule = '2_days_20_renew'; + result.recurringFinesRule = 'free'; + result.maxFine = 0; + break; + case 'law res3d': + result.durationRule = '3_days_20_renew'; + result.recurringFinesRule = 'free'; + result.maxFine = 0; + break; + case 'law res3h': + result.durationRule = '2_days_20_renew'; + result.recurringFinesRule = 'free'; + result.maxFine = 0; + break; + case 'law res5h': + result.durationRule = '2_days_20_renew'; + result.recurringFinesRule = 'free'; + result.maxFine = 0; + break; + case 'law serial': + result.durationRule = '14_days_5_renew'; + result.recurringFinesRule = 'free'; + result.maxFine = 0; + break; + case 'map': + // use defaults + break; + case 'map (circulating)': + result.durationRule = '28_days_3_renew'; + break; + case 'map (reference)': + // use defaults + break; + case 'media': + result.durationRule = '28_days_3_renew'; + break; + case 'mform': + result.durationRule = '28_days_3_renew'; + break; + case 'mform ref': + // use defaults + break; + case 'mform ser': + // use defaults + break; + case 'ref': + result.durationRule = '7_days_3_renew'; + break; + case 'rsv1': + result.durationRule = '1_day_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv2': + result.durationRule = '120_minutes_0_renew'; + result.recurringFinesRule = '5_cents_per_minute'; + result.maxFine = '50_dollars'; + break; + case 'rsv3': + result.durationRule = '3_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv7': + result.durationRule = '7_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'ser': + result.durationRule = '1_day_1_renew'; + result.recurringFinesRule = '2_dollars_per_day'; + break; + case 'thesis': + result.durationRule = '28_days_3_renew'; + break; + } + break; + + case 'Graduate': + switch(copy.circ_modifier) { + case 'cd music': + // use defaults + break; + case 'circ': + result.durationRule = '28_days_3_renew'; + break; + case 'circ short': + result.durationRule = '3_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'crc media': + result.durationRule = '7_days_3_renew'; + break; + case 'crc spec': + result.durationRule = '28_days_3_renew'; + break; + case 'crc text': + result.durationRule = '28_days_3_renew'; + break; + case 'dnon': + // use defaults + break; + case 'doc': + result.durationRule = '28_days_3_renew'; + break; + case 'dvd video': + result.durationRule = '3_days_1_renew'; + break; + case 'law mono': + result.durationRule = '28_days_5_renew'; + result.recurringFinesRule = '50_cent_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law nocirc': + // use defaults + break; + case 'law res1d': + result.durationRule = '16_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res3d': + result.durationRule = '2_days_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res3h': + result.durationRule = '3_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res5h': + result.durationRule = '5_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law serial': + // use defaults + break; + case 'map': + // use defaults + break; + case 'map (circulating)': + result.durationRule = '28_days_3_renew'; + break; + case 'map (reference)': + // use defaults + break; + case 'media': + result.durationRule = '28_days_3_renew'; + break; + case 'mform': + result.durationRule = '28_days_3_renew'; + break; + case 'mform ref': + // use defaults + break; + case 'mform ser': + // use defaults + break; + case 'ref': + result.durationRule = '7_days_3_renew'; + break; + case 'rsv1': + result.durationRule = '1_day_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv2': + result.durationRule = '120_minutes_0_renew'; + result.recurringFinesRule = '5_cents_per_minute'; + result.maxFine = '50_dollars'; + break; + case 'rsv3': + result.durationRule = '3_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv7': + result.durationRule = '7_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'ser': + result.durationRule = '1_day_1_renew'; + result.recurringFinesRule = '2_dollars_per_day'; + break; + case 'thesis': + result.durationRule = '28_days_3_renew'; + break; + } + break; + + case 'Readers': + + /* currently STAFF, LAW1, LAW2, and LAW3. applying STAFF rules to Leddy items + and LAWx rules to Law items - fix as soon as Windsor groups exists! */ + + switch(copy.circ_modifier) { + case 'cd music': + result.durationRule = '3_days_1_renew'; + break; + case 'circ': + result.durationRule = '28_days_3_renew'; + break; + case 'circ short': + result.durationRule = '1_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'crc media': + result.durationRule = '7_days_3_renew'; + break; + case 'crc spec': + result.durationRule = '28_days_3_renew'; + break; + case 'crc text': + result.durationRule = '28_days_3_renew'; + break; + case 'dnon': + // use defaults + break; + case 'doc': + result.durationRule = '28_days_3_renew'; + break; + case 'dvd video': + result.durationRule = '3_days_1_renew'; + break; + case 'law mono': + result.durationRule = '28_days_5_renew'; + result.maxFine = '50_dollars'; + break; + case 'law nocirc': + // use defaults + break; + case 'law res1d': + result.durationRule = '16_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res3d': + result.durationRule = '2_days_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res3h': + result.durationRule = '3_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res5h': + result.durationRule = '5_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law serial': + // use defaults + break; + case 'map': + // use defaults + break; + case 'map (circulating)': + result.durationRule = '28_days_3_renew'; + break; + case 'map (reference)': + // use defaults + break; + case 'media': + result.durationRule = '28_days_3_renew'; + break; + case 'mform': + result.durationRule = '28_days_3_renew'; + break; + case 'mform ref': + // use defaults + break; + case 'mform ser': + // use defaults + break; + case 'ref': + result.durationRule = '7_days_3_renew'; + break; + case 'rsv1': + result.durationRule = '1_day_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv2': + result.durationRule = '120_minutes_0_renew'; + result.recurringFinesRule = '5_cents_per_minute'; + result.maxFine = '50_dollars'; + break; + case 'rsv3': + result.durationRule = '3_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv7': + result.durationRule = '7_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'ser': + result.durationRule = '1_day_1_renew'; + result.recurringFinesRule = '2_dollars_per_day'; + break; + case 'thesis': + result.durationRule = '28_days_3_renew'; + break; + } + break; + + case 'Undergraduate': + switch(copy.circ_modifier) { + case 'cd music': + // use defaults + break; + case 'circ': + result.durationRule = '14_days_3_renew'; + break; + case 'circ short': + result.durationRule = '3_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'crc media': + result.durationRule = '7_days_3_renew'; + break; + case 'crc spec': + result.durationRule = '14_days_3_renew'; + break; + case 'crc text': + result.durationRule = '14_days_3_renew'; + break; + case 'dnon': + // use defaults + break; + case 'doc': + result.durationRule = '14_days_3_renew'; + break; + case 'dvd video': + result.durationRule = '3_days_1_renew'; + break; + case 'law mono': + result.durationRule = '28_days_5_renew'; + result.maxFine = '50_dollars'; + break; + case 'law nocirc': + // use defaults + break; + case 'law res1d': + result.durationRule = '16_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res3d': + result.durationRule = '2_days_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res3h': + result.durationRule = '3_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law res5h': + result.durationRule = '5_hours_20_renew'; + result.recurringFinesRule = '60_cents_per_day'; + result.maxFine = '50_dollars'; + break; + case 'law serial': + // use defaults + break; + case 'map': + // use defaults + break; + case 'map (circulating)': + result.durationRule = '14_days_3_renew'; + break; + case 'map (reference)': + // use defaults + break; + case 'media': + result.durationRule = '14_days_3_renew'; + break; + case 'mform': + result.durationRule = '14_days_3_renew'; + break; + case 'mform ref': + // use defaults + break; + case 'mform ser': + // use defaults + break; + case 'ref': + result.durationRule = '7_days_3_renew'; + break; + case 'rsv1': + result.durationRule = '1_day_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv2': + result.durationRule = '120_minutes_0_renew'; + result.recurringFinesRule = '5_cents_per_minute'; + result.maxFine = '50_dollars'; + break; + case 'rsv3': + result.durationRule = '3_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'rsv7': + result.durationRule = '7_days_1_renew'; + result.recurringFinesRule = '10_dollars_per_day'; + result.maxFine = '50_dollars'; + break; + case 'ser': + // use defaults + break; + case 'thesis': + result.durationRule = '14_days_3_renew'; + break; + } + break; + +} + +/* set variable to tell circ_duration.js that an institution specific script has executed */ +circ_institution_override = true; diff --git a/tools/migration-scripts/circ_rules.sql b/tools/migration-scripts/circ_rules.sql new file mode 100644 index 0000000000..9e3b9c8431 --- /dev/null +++ b/tools/migration-scripts/circ_rules.sql @@ -0,0 +1,29 @@ +INSERT INTO config.rule_circ_duration (name, extended, normal, shrt, max_renewals) VALUES + ('120_days_2_renew', '120 days', '120 days', '120 days', 2), -- OSUL rules + ('3_weeks_2_renew', '3 weeks', '3 weeks', '3 weeks', 2), + ('14_days_3_renew', '14 days', '14 days', '14 days', 3), -- OWA rules + ('28_days_3_renew', '28 days', '28 days', '28 days', 3), + ('7_days_1_renew', '7 days', '7 days', '7 days', 1), + ('7_days_3_renew', '7 days', '7 days', '7 days', 3), + ('120_minutes_0_renew', '120 minutes', '120 minutes', '120 minutes', 0), + + ('28_days_5_renew', '28 days', '28 days', '28 days', 5), -- OWAL rules + ('14_days_5_renew', '14 days', '14 days', '14 days', 5), + ('2_days_20_renew', '2 days', '2 days', '2 days', 20), + ('3_days_20_renew', '3 days', '3 days', '3 days', 20), + ('1_day_1_renew', '1 day', '1 day', '1 day', 1), + ('16_hours_20_renew', '16 hours', '16 hours', '16 hours', 20), + ('3_hours_20_renew', '3 hours', '3 hours', '3 hours', 20), + ('5_hours_20_renew', '5 hours', '5 hours', '5 hours', 20), + ('non_circ', '0 days', '0 days', '0 days', 0); -- obviously a sign that permit_patron or permit_copy should be invoked instead, but oh well for now + +INSERT INTO config.rule_max_fine (name, amount) VALUES + ('10_dollars', 10.00), + ('50_dollars', 50.00); + +INSERT INTO config.rule_recuring_fine (name, high, normal, low, recurance_interval) VALUES + ('free', 0.00, 0.00, 0.00, '1 day'), + ('5_cents_per_minute', 00.05, 00.05, 00.05, '1 minute'), + ('60_cents_per_day', 00.60, 00.60, 00.60, '1 day'), + ('2_dollars_per_day', 2.00, 2.00, 2.00, '1 day'), + ('10_dollars_per_day', 10.00, 10.00, 10.00, '1 day'); -- 2.11.0