From: Mike Rylander Date: Fri, 12 May 2017 20:34:33 +0000 (-0400) Subject: webstaff: service addition for generating holding codes, seeded or unseeded X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=b22c2f065d6580527c1e2e6f56ca5bba34b6b251;p=working%2FEvergreen.git webstaff: service addition for generating holding codes, seeded or unseeded Signed-off-by: Mike Rylander Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/src/templates/staff/serials/t_holding_code_dialog.tt2 b/Open-ILS/src/templates/staff/serials/t_holding_code_dialog.tt2 new file mode 100644 index 0000000000..a093f0d8ac --- /dev/null +++ b/Open-ILS/src/templates/staff/serials/t_holding_code_dialog.tt2 @@ -0,0 +1,68 @@ +
+ + + + + +
diff --git a/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 b/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 index 24228ec97b..33712010f6 100644 --- a/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 +++ b/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 @@ -6,6 +6,8 @@ grid-controls="itemGridControls" persist-key="serials.view_item_grid"> + = 21) || (m == 3 && d < 20) + ) { + return 24; /* MFHD winter */ + } else if ( + (m == 4 || m == 5) || (m == 3 && d >= 20) || (m == 6 && d < 21) + ) { + return 21; /* spring */ + } else if ( + (m == 7 || m == 8) || (m == 6 && d >= 21) || (m == 9 && d < 22) + ) { + return 22; /* summer */ + } else { + return 23; /* autumn */ + } + } + // fetch subscription, distributions, streams, captions, // and notes associated with the indicated bib service.fetch = function(bibId, contextOrg) { @@ -96,6 +164,150 @@ function(egCore , orderByFilter , $q) { }); } + service.prep_new_holding_code = function (args) { + + var type = args.type; + var date = args.date; + var prev_iss = args.prev_iss; + + var sub = service.get_ssub(service.subId); + if (!sub) return $q.reject(); + + var scap; + var tmp = sub.scaps().filter(function (scap) { + return (scap.type() == type && scap.active() == 't'); + }); + if (angular.isArray(tmp) && tmp[0]) scap = tmp[0]; + + if (!scap) return $q.reject(); + + var others = [], enums = [], chrons = [], freq = ''; + var pat = JSON.parse(scap.pattern_code()).slice(4); // just the part we care about + + var freq_index = pat.indexOf('w'); + if (freq_index > -1) { + freq = pat[freq_index + 1]; + } + + var link = '1.1'; + if (prev_iss) { + var old_link_parts = JSON.parse(prev_iss.holding_code())[3].split('.'); + var olink = old_link_parts[0]; + var oseq = parseInt(old_link_parts[1]) + 1; + link = [olink,oseq].join('.'); + + date = new Date( + new Date(prev_iss.date_published()).getTime() + service.freq_offset[freq] + ); + } + + if (!date) date = new Date(); + + for (var i = 0; i < pat.length; i++) { + sf = pat[i]; i++; + val = pat[i]; + + if (sf != 'w') { + var pat_part = { + subfield : sf, + pattern : val + }; + + var chron_part = val.replace(/[)(]+/g,''); + try { + pat_part.value = service.get_chron_part[chron_part](date); + } catch (e) { + // not a chron part + pat_part.value = ''; + } + + if (sf.match(/[a-f]/)) { + enums.push(pat_part); + } else if (sf.match(/[i-l]/)) { + chrons.push(pat_part); + } else { + others.push(pat_part); + } + } + } + + if (enums.length == 0 && chrons.length == 0) { + var parts = service.freq_chrons[freq]; + if (parts.length) { + angular.forEach(parts, function(p, ind) { + var sf = !ind ? 'i' : !--ind ? 'j' : 'k'; + chrons.push({ + subfield : sf, + value : service.get_chron_part.year(date) + }); + }); + } else { + chrons = [ + { subfield : 'i', value : service.get_chron_part.year(date) }, + { subfield : 'j', value : service.get_chron_part.month(date) }, + { subfield : 'k', value : service.get_chron_part.day(date) } + ]; + } + } + + return { + holding_code : ["4","1","8",link], + date : date, + enums : enums, + chrons : chrons, + others : others, + freq : freq + }; + } + + service.new_holding_code = function (options) { + if (options === undefined) options = {}; + + return $uibModal.open({ + templateUrl: './serials/t_holding_code_dialog', + //size: 'lg', + //windowClass: 'eg-wide-modal', + backdrop: 'static', + controller: + ['$scope', '$uibModalInstance', function($scope, $uibModalInstance) { + $scope.focusMe = true; + $scope.title = options.title; + $scope.pubdate = options.date || new Date(); + $scope.type = options.type || 'basic'; + $scope.args = {}; + + function refresh (n,o) { + if (n && o && n !== o) { + $scope.args = service.prep_new_holding_code({ + type : $scope.type, + date : $scope.pubdate, + prev_iss : options.prev_iss + }); + $scope.pubdate = $scope.args.date; + } + } + + $scope.$watch('type',refresh); + $scope.$watch('pubdate',refresh); + + $scope.ok = function(args) { $uibModalInstance.close(args) } + $scope.cancel = function () { $uibModalInstance.dismiss() } + + refresh(1,2); // force data loading + }] + }).result.then(function (args) { + angular.forEach( + args.enums.concat(args.chrons), + function (e) { + args.holding_code.push(e.subfield); + args.holding_code.push(e.value); + } + ); + + return $q.when(args.holding_code); + }); + } + // create/update a flat version of the subscription/distribution/stream // tree for feeding to the distribution and stream grid function update_flat_sdist_sstr_list() {