]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/javascript/backend/catalog/record_type.js
more in(de)gestion
[Evergreen.git] / Open-ILS / src / javascript / backend / catalog / record_type.js
1
2 var rec_type = {
3         BKS : { Type : /[at]{1}/,       BLvl : /[acdm]{1}/ },
4         SER : { Type : /[a]{1}/,        BLvl : /[bs]{1}/ },
5         VIS : { Type : /[gkro]{1}/,     BLvl : /[abcdms]{1}/ },
6         MIX : { Type : /[p]{1}/,        BLvl : /[cd]{1}/ },
7         MAP : { Type : /[ef]{1}/,       BLvl : /[abcdms]{1}/ },
8         SCO : { Type : /[cd]{1}/,       BLvl : /[abcdms]{1}/ },
9         REC : { Type : /[ij]{1}/,       BLvl : /[abcdms]{1}/ },
10         COM : { Type : /[m]{1}/,        BLvl : /[abcdms]{1}/ }
11 };
12
13 var ff_pos = {
14         Ctry : {
15                 _8 : {
16                         BKS : {start : 15, len : 3, def : ' ' },
17                         SER : {start : 15, len : 3, def : ' ' },
18                         VIS : {start : 15, len : 3, def : ' ' },
19                         MIX : {start : 15, len : 3, def : ' ' },
20                         MAP : {start : 15, len : 3, def : ' ' },
21                         SCO : {start : 15, len : 3, def : ' ' },
22                         REC : {start : 15, len : 3, def : ' ' },
23                         COM : {start : 15, len : 3, def : ' ' },
24                 }
25         },
26         Lang : {
27                 _8 : {
28                         BKS : {start : 35, len : 3, def : ' ' },
29                         SER : {start : 35, len : 3, def : ' ' },
30                         VIS : {start : 35, len : 3, def : ' ' },
31                         MIX : {start : 35, len : 3, def : ' ' },
32                         MAP : {start : 35, len : 3, def : ' ' },
33                         SCO : {start : 35, len : 3, def : ' ' },
34                         REC : {start : 35, len : 3, def : ' ' },
35                         COM : {start : 35, len : 3, def : ' ' },
36                 }
37         },
38         MRec : {
39                 _8 : {
40                         BKS : {start : 38, len : 1, def : ' ' },
41                         SER : {start : 38, len : 1, def : ' ' },
42                         VIS : {start : 38, len : 1, def : ' ' },
43                         MIX : {start : 38, len : 1, def : ' ' },
44                         MAP : {start : 38, len : 1, def : ' ' },
45                         SCO : {start : 38, len : 1, def : ' ' },
46                         REC : {start : 38, len : 1, def : ' ' },
47                         COM : {start : 38, len : 1, def : ' ' },
48                 }
49         },
50         DtSt : {
51                 _8 : {
52                         BKS : {start : 6, len : 1, def : ' ' },
53                         SER : {start : 6, len : 1, def : 'c' },
54                         VIS : {start : 6, len : 1, def : ' ' },
55                         MIX : {start : 6, len : 1, def : ' ' },
56                         MAP : {start : 6, len : 1, def : ' ' },
57                         SCO : {start : 6, len : 1, def : ' ' },
58                         REC : {start : 6, len : 1, def : ' ' },
59                         COM : {start : 6, len : 1, def : ' ' },
60                 }
61         },
62         Type : {
63                 ldr : {
64                         BKS : {start : 6, len : 1, def : 'a' },
65                         SER : {start : 6, len : 1, def : 'a' },
66                         VIS : {start : 6, len : 1, def : 'g' },
67                         MIX : {start : 6, len : 1, def : 'p' },
68                         MAP : {start : 6, len : 1, def : 'e' },
69                         SCO : {start : 6, len : 1, def : 'c' },
70                         REC : {start : 6, len : 1, def : 'i' },
71                         COM : {start : 6, len : 1, def : 'm' },
72                 }
73         },
74         Ctrl : {
75                 ldr : {
76                         BKS : {start : 8, len : 1, def : ' ' },
77                         SER : {start : 8, len : 1, def : ' ' },
78                         VIS : {start : 8, len : 1, def : ' ' },
79                         MIX : {start : 8, len : 1, def : ' ' },
80                         MAP : {start : 8, len : 1, def : ' ' },
81                         SCO : {start : 8, len : 1, def : ' ' },
82                         REC : {start : 8, len : 1, def : ' ' },
83                         COM : {start : 8, len : 1, def : ' ' },
84                 }
85         },
86         BLvl : {
87                 ldr : {
88                         BKS : {start : 7, len : 1, def : 'm' },
89                         SER : {start : 7, len : 1, def : 's' },
90                         VIS : {start : 7, len : 1, def : 'm' },
91                         MIX : {start : 7, len : 1, def : 'c' },
92                         MAP : {start : 7, len : 1, def : 'm' },
93                         SCO : {start : 7, len : 1, def : 'm' },
94                         REC : {start : 7, len : 1, def : 'm' },
95                         COM : {start : 7, len : 1, def : 'm' },
96                 }
97         },
98         Desc : {
99                 ldr : {
100                         BKS : {start : 18, len : 1, def : ' ' },
101                         SER : {start : 18, len : 1, def : ' ' },
102                         VIS : {start : 18, len : 1, def : ' ' },
103                         MIX : {start : 18, len : 1, def : ' ' },
104                         MAP : {start : 18, len : 1, def : ' ' },
105                         SCO : {start : 18, len : 1, def : ' ' },
106                         REC : {start : 18, len : 1, def : ' ' },
107                         COM : {start : 18, len : 1, def : ' ' },
108                 }
109         },
110         ELvl : {
111                 ldr : {
112                         BKS : {start : 17, len : 1, def : ' ' },
113                         SER : {start : 17, len : 1, def : ' ' },
114                         VIS : {start : 17, len : 1, def : ' ' },
115                         MIX : {start : 17, len : 1, def : ' ' },
116                         MAP : {start : 17, len : 1, def : ' ' },
117                         SCO : {start : 17, len : 1, def : ' ' },
118                         REC : {start : 17, len : 1, def : ' ' },
119                         COM : {start : 17, len : 1, def : ' ' },
120                 }
121         },
122         TMat : {
123                 _8 : {
124                         VIS : {start : 33, len : 1, def : ' ' },
125                 },
126                 _6 : {
127                         VIS : {start : 16, len : 1, def : ' ' },
128                 }
129         },
130         Indx : {
131                 _8 : {
132                         BKS : {start : 31, len : 1, def : '0' },
133                         MAP : {start : 31, len : 1, def : '0' },
134                 },
135                 _6 : {
136                         BKS : {start : 14, len : 1, def : '0' },
137                         MAP : {start : 14, len : 1, def : '0' },
138                 }
139         },
140         Date1 : {
141                 _8 : {
142                         BKS : {start : 7, len : 4, def : ' ' },
143                         SER : {start : 7, len : 4, def : ' ' },
144                         VIS : {start : 7, len : 4, def : ' ' },
145                         MIX : {start : 7, len : 4, def : ' ' },
146                         MAP : {start : 7, len : 4, def : ' ' },
147                         SCO : {start : 7, len : 4, def : ' ' },
148                         REC : {start : 7, len : 4, def : ' ' },
149                         COM : {start : 7, len : 4, def : ' ' },
150                 },
151         },
152         Date2 : {
153                 _8 : {
154                         BKS : {start : 11, len : 4, def : ' ' },
155                         SER : {start : 11, len : 4, def : '9' },
156                         VIS : {start : 11, len : 4, def : ' ' },
157                         MIX : {start : 11, len : 4, def : ' ' },
158                         MAP : {start : 11, len : 4, def : ' ' },
159                         SCO : {start : 11, len : 4, def : ' ' },
160                         REC : {start : 11, len : 4, def : ' ' },
161                         COM : {start : 11, len : 4, def : ' ' },
162                 },
163         },
164         LitF : {
165                 _8 : {
166                         BKS : {start : 33, len : 1, def : '0' },
167                 },
168                 _6 : {
169                         BKS : {start : 16, len : 1, def : '0' },
170                 }
171         },
172         Biog : {
173                 _8 : {
174                         BKS : {start : 34, len : 1, def : ' ' },
175                 },
176                 _6 : {
177                         BKS : {start : 17, len : 1, def : ' ' },
178                 }
179         },
180         Ills : {
181                 _8 : {
182                         BKS : {start : 18, len : 4, def : ' ' },
183                 },
184                 _6 : {
185                         BKS : {start : 1, len : 4, def : ' ' },
186                 }
187         },
188         Fest : {
189                 _8 : {
190                         BKS : {start : 30, len : 1, def : '0' },
191                 },
192                 _6 : {
193                         BKS : {start : 13, len : 1, def : '0' },
194                 }
195         },
196         Conf : {
197                 _8 : {
198                         BKS : {start : 24, len : 4, def : ' ' },
199                         SER : {start : 25, len : 3, def : ' ' },
200                 },
201                 _6 : {
202                         BKS : {start : 7, len : 4, def : ' ' },
203                         SER : {start : 8, len : 3, def : ' ' },
204                 }
205         },
206         GPub : {
207                 _8 : {
208                         BKS : {start : 28, len : 1, def : ' ' },
209                         SER : {start : 28, len : 1, def : ' ' },
210                         VIS : {start : 28, len : 1, def : ' ' },
211                         MAP : {start : 28, len : 1, def : ' ' },
212                         COM : {start : 28, len : 1, def : ' ' },
213                 },
214                 _6 : {
215                         BKS : {start : 11, len : 1, def : ' ' },
216                         SER : {start : 11, len : 1, def : ' ' },
217                         VIS : {start : 11, len : 1, def : ' ' },
218                         MAP : {start : 11, len : 1, def : ' ' },
219                         COM : {start : 11, len : 1, def : ' ' },
220                 }
221         },
222         Audn : {
223                 _8 : {
224                         BKS : {start : 22, len : 1, def : ' ' },
225                         SER : {start : 22, len : 1, def : ' ' },
226                         VIS : {start : 22, len : 1, def : ' ' },
227                         SCO : {start : 22, len : 1, def : ' ' },
228                         REC : {start : 22, len : 1, def : ' ' },
229                         COM : {start : 22, len : 1, def : ' ' },
230                 },
231                 _6 : {
232                         BKS : {start : 5, len : 1, def : ' ' },
233                         SER : {start : 5, len : 1, def : ' ' },
234                         VIS : {start : 5, len : 1, def : ' ' },
235                         SCO : {start : 5, len : 1, def : ' ' },
236                         REC : {start : 5, len : 1, def : ' ' },
237                         COM : {start : 5, len : 1, def : ' ' },
238                 }
239         },
240         Form : {
241                 _8 : {
242                         BKS : {start : 23, len : 1, def : ' ' },
243                         SER : {start : 23, len : 1, def : ' ' },
244                         VIS : {start : 29, len : 1, def : ' ' },
245                         MIX : {start : 23, len : 1, def : ' ' },
246                         MAP : {start : 29, len : 1, def : ' ' },
247                         SCO : {start : 23, len : 1, def : ' ' },
248                         REC : {start : 23, len : 1, def : ' ' },
249                 },
250                 _6 : {
251                         BKS : {start : 6, len : 1, def : ' ' },
252                         SER : {start : 6, len : 1, def : ' ' },
253                         VIS : {start : 12, len : 1, def : ' ' },
254                         MIX : {start : 6, len : 1, def : ' ' },
255                         MAP : {start : 12, len : 1, def : ' ' },
256                         SCO : {start : 6, len : 1, def : ' ' },
257                         REC : {start : 6, len : 1, def : ' ' },
258                 }
259         },
260         'S/L' : {
261                 _8 : {
262                         SER : {start : 34, len : 1, def : '0' },
263                 },
264                 _6 : {
265                         SER : {start : 17, len : 1, def : '0' },
266                 }
267         },
268         'Alph' : {
269                 _8 : {
270                         SER : {start : 33, len : 1, def : ' ' },
271                 },
272                 _6 : {
273                         SER : {start : 16, len : 1, def : ' ' },
274                 }
275         },
276 };
277
278 function recordType (rec) {
279
280         var marcns = new Namespace("http://www.loc.gov/MARC21/slim");
281         var _l = rec.marcns::leader.toString();
282
283         var _t = _l.substr(ff_pos.Type.ldr.BKS.start, ff_pos.Type.ldr.BKS.len);
284         var _b = _l.substr(ff_pos.BLvl.ldr.BKS.start, ff_pos.BLvl.ldr.BKS.len);
285
286         for (var t in rec_type) {
287                 if (_t.match(rec_type[t].Type) && _b.match(rec_type[t].BLvl)) {
288                         return t;
289                 }
290         }
291 }
292
293 function extractFixedField (rec, field) {
294
295         var marcns = new Namespace("http://www.loc.gov/MARC21/slim");
296         var _l = rec.marcns::leader.toString();
297         var _8 = rec.marcns::controlfield.(@tag.match(/008/)).text().toString();
298         var _6 = rec.marcns::controlfield.(@tag.match(/006/)).text().toString();
299         var _7 = rec.marcns::controlfield.(@tag.match(/007/)).text().toString();
300
301         var rtype = recordType(rec);
302
303         var val;
304
305         if (ff_pos[field].ldr) {
306                 if (ff_pos[field].ldr[rtype]) {
307                         val = _l.substr(
308                                 ff_pos[field].ldr[rtype].start,
309                                 ff_pos[field].ldr[rtype].len
310                         );
311                 }
312         } else if (ff_pos[field]._8) {
313                 if (ff_pos[field]._8[rtype]) {
314                         val = _8.substr(
315                                 ff_pos[field]._8[rtype].start,
316                                 ff_pos[field]._8[rtype].len
317                         );
318                 }
319         }
320
321         if (!val && ff_pos[field]._6) {
322                 if (ff_pos[field]._6[rtype]) {
323                         val = _6.substr(
324                                 ff_pos[field]._6[rtype].start,
325                                 ff_pos[field]._6[rtype].len
326                         );
327                 }
328         }
329                 
330         return val;
331 }
332