2 * Retrieve, cache, and query MARC tag tables
4 angular.module('egCoreMod')
6 ['$q', 'egCore', 'egAuth',
7 function($q, egCore, egAuth) {
10 defaultTagTableSelector : {
11 marcFormat : 'marc21',
12 marcRecordType : 'biblio',
19 // allow 'bre' and 'biblio' to be synonyms, etc.
20 service.normalizeRecordType = function(recordType) {
21 if (recordType === 'sre') {
23 } else if (recordType === 'bre') {
25 } else if (recordType === 'are') {
32 service.loadTagTable = function(args) {
33 var fields = service.defaultTagTableSelector;
35 if (args.marcFormat) {
36 fields.marcFormat = args.marcFormat;
38 if (args.marcRecordType) {
39 fields.marcRecordType = service.normalizeRecordType(args.marcRecordType);
42 var tt_key = 'current_tag_table_' + fields.marcFormat + '_' +
43 fields.marcRecordType;
44 egCore.hatch.getItem(tt_key).then(function(tt) {
48 service.loadRemoteTagTable(fields, tt_key);
53 service.fetchFFPosTable = function(rtype) {
54 var deferred = $q.defer();
56 var hatch_pos_key = 'FFPosTable_'+rtype;
58 egCore.hatch.getItem(hatch_pos_key).then(function(cached_table) {
60 service.ff_pos_map[rtype] = cached_table;
61 deferred.resolve(cached_table);
65 egCore.net.request( // First, get the list of FFs (minus 006)
67 'open-ils.fielder.cmfpm.atomic',
68 { query : { tag : { '!=' : '006' } } }
69 ).then(function (data) {
70 service.ff_pos_map[rtype] = data;
71 egCore.hatch.setItem(hatch_pos_key, data);
72 deferred.resolve(data);
77 return deferred.promise;
80 service.fetchFFValueTable = function(rtype) {
81 var deferred = $q.defer();
83 var hatch_value_key = 'FFValueTable_'+rtype;
85 egCore.hatch.getItem(hatch_value_key).then(function(cached_table) {
87 service.ff_value_map[rtype] = cached_table;
88 deferred.resolve(cached_table);
94 'open-ils.cat.biblio.fixed_field_values.by_rec_type',
96 ).then(function (data) {
97 service.ff_value_map[rtype] = data;
98 egCore.hatch.setItem(hatch_value_key, data);
99 deferred.resolve(data);
104 return deferred.promise;
107 service.loadRemoteTagTable = function(fields, tt_key) {
110 'open-ils.cat.tag_table.all.retrieve.local',
111 egAuth.token(), fields.marcFormat, fields.marcRecordType
114 egCore.hatch.setItem(tt_key, service.fields);
116 function (err) { console.err('error fetch tag table: ' + err) },
119 service.fields[field.tag] = field;
124 service.getFieldTags = function() {
126 angular.forEach(service.fields, function(value, key) {
129 label: key + ': ' + value.name
135 service.getSubfieldCodes = function(tag) {
138 if (!service.fields[tag]) return;
139 angular.forEach(service.fields[tag].subfields, function(value) {
142 label: value.code + ': ' + value.description
148 service.getSubfieldValues = function(tag, sf_code) {
150 if (!tag) return list;
151 if (!service.fields[tag]) return;
152 if (!service.fields[tag]) return;
153 angular.forEach(service.fields[tag].subfields, function(sf) {
154 if (sf.code == sf_code && sf.hasOwnProperty('value_list')) {
155 angular.forEach(sf.value_list, function(value) {
156 var label = (value.code == value.description) ?
158 value.code + ': ' + value.description;
169 service.getIndicatorValues = function(tag, pos) {
171 if (!tag) return list;
172 if (!service.fields[tag]) return;
173 if (!service.fields[tag]["ind" + pos]) return;
174 angular.forEach(service.fields[tag]["ind" + pos], function(value) {
177 label: value.code + ': ' + value.description