From 312828bf4cba64510cb2203699b15326286275ca Mon Sep 17 00:00:00 2001 From: Matthias Meusburger Date: Thu, 28 Jan 2010 12:06:44 +0100 Subject: [PATCH] MT2663 : Adds an itemcallnumber plugin --- cataloguing/value_builder/callnumber.pl | 115 ++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100755 cataloguing/value_builder/callnumber.pl diff --git a/cataloguing/value_builder/callnumber.pl b/cataloguing/value_builder/callnumber.pl new file mode 100755 index 0000000000..ecdaea495a --- /dev/null +++ b/cataloguing/value_builder/callnumber.pl @@ -0,0 +1,115 @@ +#!/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., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +use warnings; +use C4::Auth; +use CGI; +use C4::Context; + +=head1 + +Is used for callnumber computation. + +If the user send an empty string, we return a simple incremented callnumber. +If a prefix is submited, we look for the highest callnumber with this prefix, and return it incremented. +In this case, a callnumber has this form : "PREFIX 0009678570". + - PREFIX is an upercase word + - a space separator + - 10 digits, with leading 0s if needed + +=cut + +sub plugin_parameters { +} + +sub plugin_javascript { + my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; + my $res=" + + "; + + return ($field_number,$res); +} + +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 $dbh = C4::Context->dbh; + # If the textbox is empty, we return a simple incremented callnumber + if ( $code eq "" ) { + my $sth = $dbh->prepare("SELECT MAX(CAST(itemcallnumber AS SIGNED)) FROM items"); + $sth->execute; + + if ( my $max = $sth->fetchrow ) { + $template->param( + return => $max+1, + ); + } + # If a prefix is submited, we look for the highest itemcallnumber with this prefix, and return it incremented + } elsif ( $code =~ m/^[A-Z]+$/ ) { + my $sth = $dbh->prepare("SELECT MAX(CAST(SUBSTRING_INDEX(itemcallnumber,' ',-1) AS SIGNED)) FROM items WHERE itemcallnumber LIKE ?"); + $sth->execute($code.' %'); + if ( my $max = $sth->fetchrow ) { + $template->param( + return => $code.' '.($max+1) + ); + } + # The user entered a custom value, we don't touch it, this could be handled in js + } else { + $template->param( + return => $code, + ); + } + output_html_with_http_headers $input, $cookie, $template->output; +} + +1; -- 2.39.5