First cut at OWA/OWAL circ rules
authordbs <dbs@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Sat, 2 May 2009 13:20:49 +0000 (13:20 +0000)
committerdbs <dbs@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Sat, 2 May 2009 13:20:49 +0000 (13:20 +0000)
git-svn-id: svn://svn.open-ils.org/ILS-Contrib/conifer/trunk@431 6d9bc8c9-1ec2-4278-b937-99fde70a366f

circ/circ_duration.js
circ/circ_duration_OWA.js [new file with mode: 0644]
tools/migration-scripts/circ_rules.sql [new file with mode: 0644]

index 137546d..2dcef53 100755 (executable)
@@ -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 (file)
index 0000000..65ddaea
--- /dev/null
@@ -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 (file)
index 0000000..9e3b9c8
--- /dev/null
@@ -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');