[Koha-patches] [PATCH] bug_7458: call number plugin
Melia Meggs
melia at test.bywatersolutions.com
Thu Jan 26 02:13:39 CET 2012
From: Srdjan Jankovic <srdjan at catalyst.net.nz>
Signed-off-by: Melia Meggs <melia at test.bywatersolutions.com>
This patch is a call number plugin that generates the next available call number. After typing in an appropriate three or four letter prefix, followed by one or two numbers in subfield o - Full Call Number on the Add Item screen, this plugin will generate the next available call number with that prefix that is not yet in use.
---
cataloguing/value_builder/callnumber-KU.pl | 127 ++++++++++++++++++++++++++++
1 files changed, 127 insertions(+), 0 deletions(-)
create mode 100755 cataloguing/value_builder/callnumber-KU.pl
diff --git a/cataloguing/value_builder/callnumber-KU.pl b/cataloguing/value_builder/callnumber-KU.pl
new file mode 100755
index 0000000..885026f
--- /dev/null
+++ b/cataloguing/value_builder/callnumber-KU.pl
@@ -0,0 +1,127 @@
+#!/usr/bin/perl
+
+# Copyright 2010 BibLibre SARL
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+use warnings;
+use C4::Auth;
+use CGI;
+use C4::Context;
+
+=head1 DESCRIPTION
+
+Is used for callnumber computation.
+
+User must supply a letter prefix (unspecified length) followed by an empty space followed by a "number".
+"Number" is i4 character long, and is either a number sequence which is 0 padded
+or two letters which are 01 padded.
+If input does not conform with this format any processing is omitted.
+
+Some examples of legal values that trigger auto allocation:
+
+AAA 0 - returns largest number AAA 0xxx incremented by 1 or AAA 0000
+BBB 12 - returns largest number BBB 12xx incremented by 1 or BBB 1200
+CCC QW - returns largest number CCC QWxx incremented by 1 or CCC QW01
+
+=cut
+
+sub plugin_parameters {
+}
+
+sub plugin_javascript {
+ my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_;
+ my $res="
+ <script type='text/javascript'>
+ function Focus$field_number() {
+ return 1;
+ }
+
+ function Blur$field_number() {
+ return 1;
+ }
+
+ function Clic$field_number() {
+ var code = document.getElementById('$field_number');
+ var url = '../cataloguing/plugin_launcher.pl?plugin_name=callnumber-KU.pl&code=' + code.value;
+ var blurcallbackcallnumber = {
+ success: function(o) {
+ var field = document.getElementById('$field_number');
+ field.value = o.responseText;
+ return 1;
+ }
+ }
+ var transaction = YAHOO.util.Connect.asyncRequest('GET',url, blurcallbackcallnumber, null);
+ return 1;
+ }
+ </script>
+ ";
+
+ return ($field_number,$res);
+}
+
+my $BASE_CALLNUMBER_RE = qr/^(\w+) (\w+)$/;
+sub plugin {
+ my ($input) = @_;
+ my $code = $input->param('code');
+
+ my ($template, $loggedinuser, $cookie) = get_template_and_user({
+ template_name => "cataloguing/value_builder/ajax.tmpl",
+ query => $input,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => {editcatalogue => '*'},
+ debug => 1,
+ });
+
+ my $ret;
+ my ($alpha, $num) = ($code =~ $BASE_CALLNUMBER_RE);
+ if (defined $num) { # otherwise no point
+ my $dbh = C4::Context->dbh;
+ if ( my $max = $dbh->selectrow_array("SELECT MAX(itemcallnumber)
+ FROM items
+ WHERE itemcallnumber LIKE ?", undef, "$code%") ) {
+ (undef, $num) = ($max =~ $BASE_CALLNUMBER_RE);
+ my ($num_alpha, $num_num) = ($num =~ m/^(\D+)?(\d+)$/);
+ my $len = length($num_num);
+ $num_num++;
+ if ($len == length($num_num)) { # no overflow
+ $ret = $num_alpha . $num_num
+ }
+ }
+ else { # pad with 0
+ my $pad_len = 4 - length($num);
+ if ($pad_len > 0) {
+ if ($num =~ m/^\d+$/) {
+ $ret = $num. ("0" x $pad_len);
+ } else {
+ $ret = $num ;
+ $ret .= "0" x ($pad_len - 1) if $pad_len > 1;
+ $ret .= "1";
+ }
+ }
+ }
+ }
+ $ret = "$alpha $ret" if $ret;
+
+ $template->param(
+ return => $ret || $code
+ );
+ output_html_with_http_headers $input, $cookie, $template->output;
+}
+
+1;
--
1.7.2.5
More information about the Koha-patches
mailing list