]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/javascript/backend/circ/circ_duration.js
testing, bug fixing, more to come
[working/Evergreen.git] / Open-ILS / src / javascript / backend / circ / circ_duration.js
1 function go(){
2
3 load_lib('circ/circ_lib.js');
4 log_vars('circ_duration');
5
6 /* ----------------------------------------------------------------------------- 
7         Configure the duration rules for the various item types and circ modifiers
8
9         MARC Fixed Field info:
10         http://www.oclc.org/bibformats/en/fixedfield/
11
12         ----------------------------------------------------------------------------- */
13
14
15
16
17 var MARC_ITEM_TYPE_MAP = {
18
19         a : { /* Language material [Books] */
20                 durationRule                    : '14_days_2_renew',
21                 recurringFinesRule      : '10_cent_per_day',
22                 recurringFinesLevel     : 'normal',
23                 maxFine                                 : 'overdue_mid'
24         },
25
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'
31         },
32
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'
38         },
39
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'
45         },
46
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'
52         },
53
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'
59         },
60
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'
66         },
67
68         e : { /* Cartographic material [Map] */
69                 durationRule                    : '3_days_1_renew',
70                 recurringFinesRule      : '50_cent_per_day',
71                 recurringFinesLevel     : 'normal',
72                 maxFine                                 : 'overdue_mid'
73         },
74
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'
80         },
81
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'
87         },
88
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'
94         },
95
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'
101         },
102
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'
108         },
109
110         m : { /* Computer file */
111                 durationRule                    : '7_days_2_renew',
112                 recurringFinesRule      : '10_cent_per_day',
113                 recurringFinesLevel     : 'normal',
114                 maxFine                                 : 'overdue_mid'
115         }
116 }
117
118
119 var CIRC_MOD_MAP = {
120
121         'Atlas'         : {
122                 durationRule                    : '7_days_2_renew',
123                 recurringFinesRule      : '50_cent_per_day',
124                 recurringFinesLevel     : 'normal',
125                 maxFine                                 : 'overdue_mid'
126         },
127
128         'Bestseller (high demand)'              : {
129                 durationRule                    : '7_days_2_renew',
130                 recurringFinesRule      : '50_cent_per_day',
131                 recurringFinesLevel     : 'normal',
132                 maxFine                                 : 'overdue_mid'
133         },
134
135         'Bestseller not high demand'    : {
136                 durationRule                    : '7_days_2_renew',
137                 recurringFinesRule      : '50_cent_per_day',
138                 recurringFinesLevel     : 'normal',
139                 maxFine                                 : 'overdue_mid'
140         },
141
142         'Bestseller-not holdable'               : {
143                 durationRule                    : '7_days_2_renew',
144                 recurringFinesLevel     : 'normal',
145                 recurringFinesRule      : '50_cent_per_day',
146                 maxFine                                 : 'overdue_mid'
147         },
148
149         'Compact Disc'                                          : {
150                 durationRule                    : '7_days_2_renew',
151                 recurringFinesRule      : '50_cent_per_day',
152                 recurringFinesLevel     : 'normal',
153                 maxFine                                 : 'overdue_mid'
154         },
155
156         'DVD'                                                                   : {
157                 durationRule                    : '7_days_2_renew',
158                 recurringFinesRule      : '50_cent_per_day',
159                 recurringFinesLevel     : 'normal',
160                 maxFine                                 : 'overdue_mid'
161         },
162
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'
168         },
169
170         'Filmstrip'                                                     : {
171                 durationRule                    : '7_days_2_renew',
172                 recurringFinesRule      : '50_cent_per_day',
173                 recurringFinesLevel     : 'normal',
174                 maxFine                                 : 'overdue_mid'
175         },
176
177         'Laserdisc'                                                     : {
178                 durationRule                    : '7_days_2_renew',
179                 recurringFinesRule      : '50_cent_per_day',
180                 recurringFinesLevel     : 'normal',
181                 maxFine                                 : 'overdue_mid'
182         },
183
184         'Magazine-Circulating'                  : {
185                 durationRule                    : '7_days_2_renew',
186                 recurringFinesRule      : '50_cent_per_day',
187                 recurringFinesLevel     : 'normal',
188                 maxFine                                 : 'overdue_mid'
189         },
190
191         'New AV material'                                       : {
192                 durationRule                    : '7_days_2_renew',
193                 recurringFinesRule      : '50_cent_per_day',
194                 recurringFinesLevel     : 'normal',
195                 maxFine                                 : 'overdue_mid'
196         },
197
198         'New Book'                                                      : {
199                 durationRule                    : '7_days_2_renew',
200                 recurringFinesRule      : '50_cent_per_day',
201                 recurringFinesLevel     : 'normal',
202                 maxFine                                 : 'overdue_mid'
203         },
204
205         'Pamphlet'                                                      : {
206                 durationRule                    : '7_days_2_renew',
207                 recurringFinesRule      : '50_cent_per_day',
208                 recurringFinesLevel     : 'normal',
209                 maxFine                                 : 'overdue_mid'
210         },
211
212         'Record'                                                                : {
213                 durationRule                    : '7_days_2_renew',
214                 recurringFinesRule      : '50_cent_per_day',
215                 recurringFinesLevel     : 'normal',
216                 maxFine                                 : 'overdue_mid'
217         },
218
219         'Talkingbook'                                           : {
220                 durationRule                    : '7_days_2_renew',
221                 recurringFinesRule      : '50_cent_per_day',
222                 recurringFinesLevel     : 'normal',
223                 maxFine                                 : 'overdue_mid'
224         },
225
226         'Toy'                                                                   : {
227                 durationRule                    : '7_days_2_renew',
228                 recurringFinesRule      : '50_cent_per_day',
229                 recurringFinesLevel     : 'normal',
230                 maxFine                                 : 'overdue_mid'
231         },
232
233         'Video (high demand)'                   : {
234                 durationRule                    : '7_days_2_renew',
235                 recurringFinesRule      : '50_cent_per_day',
236                 recurringFinesLevel     : 'normal',
237                 maxFine                                 : 'overdue_mid'
238         },
239
240         'Video public performance'              : {
241                 durationRule                    : '7_days_2_renew',
242                 recurringFinesRule      : '50_cent_per_day',
243                 recurringFinesLevel     : 'normal',
244                 maxFine                                 : 'overdue_mid'
245
246         }
247 }
248
249
250
251
252 /* Get the load duration level directly from the copy */
253 result.durationLevel    = copy.loan_duration;
254
255
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 
259         item type
260         ----------------------------------------------------------------------------- */
261 var marcType    = getMARCItemType();
262 var circMod             = copy.circ_modifier;
263 var itemForm    = (marcXMLDoc) ? extractFixedField(marcXMLDoc,'Form') : "";
264
265
266 var config = 
267         ( circMod && CIRC_MOD_MAP[circMod] ) ?
268         CIRC_MOD_MAP[circMod] : 
269         MARC_ITEM_TYPE_MAP[marcType];
270
271
272 if( CIRC_MOD_MAP[circMod] ) 
273         log_debug("a circ_mod config exists for the copy");
274
275 if( MARC_ITEM_TYPE_MAP[marcType] )
276         log_debug("an item_type config exists for the copy");
277
278
279 log_debug("Copy circ modifier = " + circMod + " and item type = " + marcType );
280
281
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         ----------------------------------------------------------------------------- */
286 if( config ) {
287
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;
293
294 } else {
295
296         result.durationRule                     = '14_days_2_renew';
297         result.recurringFinesRule       = "10_cent_per_day";
298         result.recurringFinesLevel = 'normal';
299         result.maxFine                                  = "overdue_mid";
300 }
301
302
303
304
305 /* ----------------------------------------------------------------------------- 
306         Add custom rules here.  
307         ----------------------------------------------------------------------------- */
308
309 /* statelib has some special circ rules */
310
311 if( isOrgDescendent('STATELIB', copy.circ_lib.id) ) {
312
313         result.durationRule                     = '35_days_1_renew';
314         result.recurringFinesRule       = "10_cent_per_day";
315         result.recurringFinesLevel = 'normal';
316         result.maxFine                                  = "overdue_mid";
317
318         /* reference, microfiche, microfilm */
319         if(     isTrue(copy.ref)        || 
320                         itemForm == 'a' || 
321                         itemForm == 'b' ) {
322
323                 result.durationRule             = '14_days_2_renew';
324         }       
325 }
326
327
328
329 } go();
330