]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/staff/cat/services/tagtable.js
webstaff: indicator value lists now use "description" to, well, label descriptions
[working/Evergreen.git] / Open-ILS / web / js / ui / default / staff / cat / services / tagtable.js
1 /*
2  * Retrieve, cache, and query MARC tag tables
3  */
4 angular.module('egCoreMod')
5 .factory('egTagTable', 
6        ['$q', 'egCore', 'egAuth',
7 function($q,   egCore,   egAuth) {
8
9     var service = {
10         defaultTagTableSelector : {
11             marcFormat     : 'marc21',
12             marcRecordType : 'biblio',
13         },
14         fields : { }
15     };
16
17     // allow 'bre' and 'biblio' to be synonyms, etc.
18     service.normalizeRecordType = function(recordType) {
19         if (recordType === 'sre') {
20             return 'serial';
21         } else if (recordType === 'bre') {
22             return 'biblio';
23         } else if (recordType === 'are') {
24             return 'authority';
25         } else {
26             return recordType;
27         }
28     };
29
30     service.loadTagTable = function(args) {
31         var fields = service.defaultTagTableSelector;
32         if (args) {
33             if (args.marcFormat) {
34                 fields.marcFormat = args.marcFormat;
35             }
36             if (args.marcRecordType) {
37                 fields.marcFormat = service.normalizeRecordType(args.marcFormat);
38             }
39         }
40         var tt_key = 'current_tag_table_' + fields.marcFormat + '_' +
41                      fields.marcRecordType;
42         egCore.hatch.getItem(tt_key).then(function(tt) {
43             if (tt) {
44                 service.fields = tt;
45             } else {
46                 service.loadRemoteTagTable(fields, tt_key);
47             }
48         });
49     };
50
51     service.loadRemoteTagTable = function(fields, tt_key) {
52         egCore.net.request(
53             'open-ils.cat',
54             'open-ils.cat.tag_table.all.retrieve.local',
55             egAuth.token(), fields.marcFormat, fields.marcRecordType
56         ).then(
57             function (data)  {
58                 egCore.hatch.setItem(tt_key, service.fields);
59             },
60             function (err)   { console.err('error fetch tag table: ' + err) }, 
61             function (field) {
62                 if (!field) return;
63                 service.fields[field.tag] = field;
64             }
65         );
66     };
67
68     service.getFieldTags = function() {
69         var list = [];
70         angular.forEach(service.fields, function(value, key) {
71             this.push({ 
72                 value: key,
73                 label: key + ': ' + value.name
74             });
75         }, list);
76         return list;
77     }
78
79     service.getSubfieldCodes = function(tag) {
80         var list = [];
81         if (!tag) return;
82         if (!service.fields[tag]) return;
83         angular.forEach(service.fields[tag].subfields, function(value) {
84             this.push({
85                 value: value.code,
86                 label: value.code + ': ' + value.description
87             });
88         }, list);
89         return list;
90     }
91
92     service.getIndicatorValues = function(tag, pos) {
93         var list = [];
94         if (!tag) return list;
95         if (!service.fields[tag]) return;
96         if (!service.fields[tag]["ind" + pos]) return;
97         angular.forEach(service.fields[tag]["ind" + pos], function(value) {
98             this.push({
99                 value: value.code,
100                 label: value.code + ': ' + value.description
101             });
102         }, list);
103         return list;
104     }
105
106     return service;
107 }]);