From 6c0aa43ee1d149dc53977251dc4396d9d7cb8760 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 30 Aug 2012 15:31:14 +0200 Subject: [PATCH] Bug 7992: New plugin stocknumberAV Bugzilla description (from delaye): 1 / Create a list of authorised values(INVENTORY_NUMBER). In which the code is the prefix and the description the last number assigned. 2/A space between the prefix and number. 3 / From a holding record, after indicate the prefix when you click on the plugin -> koha search the last number from authorised values assigned in the list and increment n +1 level meter Signed-off-by: Jared Camins-Esakov Works as advertised (see provisos below). Tested the following: 1) INVENTORY category has only authorised value 'PR' => PR prefix filled in, everything else gives an error. 2) INVENTORY category has two authorised values, both work. 3) INVENTORY category has no authorised values, nothing is incremented 4) Barcode contains numbers, nothing is changed. Two potential gotchas (neither of them significant enough to warrant changing, in my opinion): 1) Prefixes must consist only of uppercase alphabetical characters. 2) Negative numbers are padded with zeros to the left of the negative sign. Signed-off-by: Jared Camins-Esakov Signed-off-by: Paul Poulain --- cataloguing/value_builder/stocknumberAV.pl | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100755 cataloguing/value_builder/stocknumberAV.pl diff --git a/cataloguing/value_builder/stocknumberAV.pl b/cataloguing/value_builder/stocknumberAV.pl new file mode 100755 index 0000000000..0578d44f88 --- /dev/null +++ b/cataloguing/value_builder/stocknumberAV.pl @@ -0,0 +1,113 @@ +#!/usr/bin/perl + +# Copyright 2012 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 Modern::Perl; +use C4::Auth; +use CGI; +use C4::Context; + +=head1 DESCRIPTION + +This plugin is based on authorised values INVENTORY. +It is used for stocknumber computation. + +If the user send an empty string, we return a simple incremented stocknumber. +If a prefix is submited, we look for the highest stocknumber with this prefix, and return it incremented. +In this case, a stocknumber 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 = qq{ + + }; + + 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 a prefix is submited, we look for the highest stocknumber with this prefix, and return it incremented + $code =~ s/ *$//g; + if ( $code =~ m/^[A-Z]+$/ ) { + my $sth = $dbh->prepare("SELECT lib FROM authorised_values WHERE category='INVENTORY' AND authorised_value=?"); + $sth->execute( $code); + + if ( my $valeur = $sth->fetchrow ) { + $template->param( return => $code . ' ' . sprintf( '%010s', ( $valeur + 1 ) ), ); + my $sth2 = $dbh->prepare("UPDATE authorised_values SET lib=? WHERE category='INVENTORY' AND authorised_value=?"); + $sth2->execute($valeur+1,$code); + } else { + $template->param( return => "There is no defined value for $code"); + } + # 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