3 load_lib('circ/circ_lib.js');
4 log_vars('circ_duration');
6 /* -----------------------------------------------------------------------------
7 Configure the duration rules for the various item types and circ modifiers
10 http://www.oclc.org/bibformats/en/fixedfield/
12 ----------------------------------------------------------------------------- */
17 var MARC_ITEM_TYPE_MAP = {
19 a : { /* Language material [Books] */
20 durationRule : '14_days_2_renew',
21 recurringFinesRule : '10_cent_per_day',
22 recurringFinesLevel : 'normal',
23 maxFine : 'overdue_mid'
26 t : { /* Manuscript language material [Books] */
27 durationRule : '14_days_2_renew',
28 recurringFinesRule : '10_cent_per_day',
29 recurringFinesLevel : 'normal',
30 maxFine : 'overdue_mid'
33 g : { /* Projected medium [Videos, etc.] */
34 durationRule : '7_days_0_renew',
35 recurringFinesRule : '10_cent_per_day',
36 recurringFinesLevel : 'normal',
37 maxFine : 'overdue_mid'
40 k : { /* Two-dimensional nonprojectable graphic [Card, charts, etc.] */
41 durationRule : '14_days_2_renew',
42 recurringFinesRule : '10_cent_per_day',
43 recurringFinesLevel : 'normal',
44 maxFine : 'overdue_mid'
47 r : { /* Three-dimensional artifact or naturally occurring object [Models, games, etc.] */
48 durationRule : '14_days_2_renew',
49 recurringFinesRule : '10_cent_per_day',
50 recurringFinesLevel : 'normal',
51 maxFine : 'overdue_mid'
54 o : { /* Kit [Mixture of item types] */
55 durationRule : '14_days_2_renew',
56 recurringFinesRule : '10_cent_per_day',
57 recurringFinesLevel : 'normal',
58 maxFine : 'overdue_mid'
61 p : { /* Mixed materials [Mixture of item types] */
62 durationRule : '14_days_2_renew',
63 recurringFinesRule : '10_cent_per_day',
64 recurringFinesLevel : 'normal',
65 maxFine : 'overdue_mid'
68 e : { /* Cartographic material [Map] */
69 durationRule : '3_days_1_renew',
70 recurringFinesRule : '50_cent_per_day',
71 recurringFinesLevel : 'normal',
72 maxFine : 'overdue_mid'
75 f : { /* Manuscript cartographic material [Map] */
76 durationRule : '3_days_1_renew',
77 recurringFinesRule : '50_cent_per_day',
78 recurringFinesLevel : 'normal',
79 maxFine : 'overdue_mid'
82 c : { /* Notated music [Printed music] */
83 durationRule : '14_days_2_renew',
84 recurringFinesRule : '10_cent_per_day',
85 recurringFinesLevel : 'normal',
86 maxFine : 'overdue_mid'
89 d : { /* Manuscript notated music [Printed music] */
90 durationRule : '14_days_2_renew',
91 recurringFinesRule : '10_cent_per_day',
92 recurringFinesLevel : 'normal',
93 maxFine : 'overdue_mid'
96 i : { /* Nonmusical sound recording [Audiobooks, sound effects, etc.] */
97 durationRule : '14_days_2_renew',
98 recurringFinesRule : '10_cent_per_day',
99 recurringFinesLevel : 'normal',
100 maxFine : 'overdue_mid'
103 j : { /* Musical sound recording [Music] */
104 durationRule : '14_days_2_renew',
105 recurringFinesRule : '10_cent_per_day',
106 recurringFinesLevel : 'normal',
107 maxFine : 'overdue_mid'
110 m : { /* Computer file */
111 durationRule : '7_days_2_renew',
112 recurringFinesRule : '10_cent_per_day',
113 recurringFinesLevel : 'normal',
114 maxFine : 'overdue_mid'
122 durationRule : '7_days_2_renew',
123 recurringFinesRule : '50_cent_per_day',
124 recurringFinesLevel : 'normal',
125 maxFine : 'overdue_mid'
128 'Bestseller (high demand)' : {
129 durationRule : '7_days_2_renew',
130 recurringFinesRule : '50_cent_per_day',
131 recurringFinesLevel : 'normal',
132 maxFine : 'overdue_mid'
135 'Bestseller not high demand' : {
136 durationRule : '7_days_2_renew',
137 recurringFinesRule : '50_cent_per_day',
138 recurringFinesLevel : 'normal',
139 maxFine : 'overdue_mid'
142 'Bestseller-not holdable' : {
143 durationRule : '7_days_2_renew',
144 recurringFinesLevel : 'normal',
145 recurringFinesRule : '50_cent_per_day',
146 maxFine : 'overdue_mid'
150 durationRule : '7_days_2_renew',
151 recurringFinesRule : '50_cent_per_day',
152 recurringFinesLevel : 'normal',
153 maxFine : 'overdue_mid'
157 durationRule : '7_days_2_renew',
158 recurringFinesRule : '50_cent_per_day',
159 recurringFinesLevel : 'normal',
160 maxFine : 'overdue_mid'
163 'DVD with long loan period' : {
164 durationRule : '7_days_2_renew',
165 recurringFinesRule : '50_cent_per_day',
166 recurringFinesLevel : 'normal',
167 maxFine : 'overdue_mid'
171 durationRule : '7_days_2_renew',
172 recurringFinesRule : '50_cent_per_day',
173 recurringFinesLevel : 'normal',
174 maxFine : 'overdue_mid'
178 durationRule : '7_days_2_renew',
179 recurringFinesRule : '50_cent_per_day',
180 recurringFinesLevel : 'normal',
181 maxFine : 'overdue_mid'
184 'Magazine-Circulating' : {
185 durationRule : '7_days_2_renew',
186 recurringFinesRule : '50_cent_per_day',
187 recurringFinesLevel : 'normal',
188 maxFine : 'overdue_mid'
191 'New AV material' : {
192 durationRule : '7_days_2_renew',
193 recurringFinesRule : '50_cent_per_day',
194 recurringFinesLevel : 'normal',
195 maxFine : 'overdue_mid'
199 durationRule : '7_days_2_renew',
200 recurringFinesRule : '50_cent_per_day',
201 recurringFinesLevel : 'normal',
202 maxFine : 'overdue_mid'
206 durationRule : '7_days_2_renew',
207 recurringFinesRule : '50_cent_per_day',
208 recurringFinesLevel : 'normal',
209 maxFine : 'overdue_mid'
213 durationRule : '7_days_2_renew',
214 recurringFinesRule : '50_cent_per_day',
215 recurringFinesLevel : 'normal',
216 maxFine : 'overdue_mid'
220 durationRule : '7_days_2_renew',
221 recurringFinesRule : '50_cent_per_day',
222 recurringFinesLevel : 'normal',
223 maxFine : 'overdue_mid'
227 durationRule : '7_days_2_renew',
228 recurringFinesRule : '50_cent_per_day',
229 recurringFinesLevel : 'normal',
230 maxFine : 'overdue_mid'
233 'Video (high demand)' : {
234 durationRule : '7_days_2_renew',
235 recurringFinesRule : '50_cent_per_day',
236 recurringFinesLevel : 'normal',
237 maxFine : 'overdue_mid'
240 'Video public performance' : {
241 durationRule : '7_days_2_renew',
242 recurringFinesRule : '50_cent_per_day',
243 recurringFinesLevel : 'normal',
244 maxFine : 'overdue_mid'
252 /* Get the load duration level directly from the copy */
253 result.durationLevel = copy.loan_duration;
256 /* -----------------------------------------------------------------------------
257 If a circ_modifier is defined on the copy and we have config info for the
258 provided circ_modifier, use that config. Otherwise fall back on the MARC
260 ----------------------------------------------------------------------------- */
261 var marcType = getMARCItemType();
262 var circMod = copy.circ_modifier;
263 var itemForm = (marcXMLDoc) ? extractFixedField(marcXMLDoc,'Form') : "";
267 ( circMod && CIRC_MOD_MAP[circMod] ) ?
268 CIRC_MOD_MAP[circMod] :
269 MARC_ITEM_TYPE_MAP[marcType];
272 if( CIRC_MOD_MAP[circMod] )
273 log_debug("a circ_mod config exists for the copy");
275 if( MARC_ITEM_TYPE_MAP[marcType] )
276 log_debug("an item_type config exists for the copy");
279 log_debug("Copy circ modifier = " + circMod + " and item type = " + marcType );
282 /* -----------------------------------------------------------------------------
283 Now set the rule values based on the config. If there is no configured info
284 on this copy, fall back on defaults.
285 ----------------------------------------------------------------------------- */
288 log_debug("circ_duration found a config for the copy");
289 result.durationRule = config.durationRule;
290 result.recurringFinesRule = config.recurringFinesRule;
291 result.recurringFinesLevel = config.recurringFinesLevel;
292 result.maxFine = config.maxFine;
296 result.durationRule = '14_days_2_renew';
297 result.recurringFinesRule = "10_cent_per_day";
298 result.recurringFinesLevel = 'normal';
299 result.maxFine = "overdue_mid";
305 /* -----------------------------------------------------------------------------
306 Add custom rules here.
307 ----------------------------------------------------------------------------- */
309 /* statelib has some special circ rules */
311 if( isOrgDescendent('STATELIB', copy.circ_lib.id) ) {
313 result.durationRule = '35_days_1_renew';
314 result.recurringFinesRule = "10_cent_per_day";
315 result.recurringFinesLevel = 'normal';
316 result.maxFine = "overdue_mid";
318 /* reference, microfiche, microfilm */
319 if( isTrue(copy.ref) ||
323 result.durationRule = '14_days_2_renew';