From da1b90137223274c4c902d3eb7a10aaaa7072976 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@biblibre.com>
Date: Thu, 3 May 2012 15:22:17 +0200
Subject: [PATCH 1/1] Bug 7992: Specific plugin stocknumberam123 improvements

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
---
 cataloguing/value_builder/stocknumberam123.pl |   61 +++++++++++--------------
 1 files changed, 27 insertions(+), 34 deletions(-)

diff --git a/cataloguing/value_builder/stocknumberam123.pl b/cataloguing/value_builder/stocknumberam123.pl
index ab88f61..f9f83be 100755
--- a/cataloguing/value_builder/stocknumberam123.pl
+++ b/cataloguing/value_builder/stocknumberam123.pl
@@ -49,6 +49,10 @@ sub plugin_javascript {
         }
 
         function Blur$field_number() {
+                return 1;
+        }
+
+        function Clic$field_number() {
                 var code = document.getElementById('$field_number');
                 var url = '../cataloguing/plugin_launcher.pl?plugin_name=stocknumberam123.pl&code=' + code.value;
                 var blurcallbackstocknumber = {
@@ -61,10 +65,6 @@ sub plugin_javascript {
                 var transaction = YAHOO.util.Connect.asyncRequest('GET',url, blurcallbackstocknumber, null);
                 return 1;
         }
-
-        function Clic$field_number() {
-            return 1;
-        }
     </script>
     ";
 
@@ -75,42 +75,35 @@ 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 ( $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 stocknumber
-    if ( $code eq "" ) {
-        my $sth = $dbh->prepare("SELECT MAX(CAST(stocknumber 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 stocknumber with this prefix, and return it incremented
-    } elsif ( $code =~ m/^[A-Z]+$/ ) {
-        my $sth = $dbh->prepare("SELECT MAX(CAST(SUBSTRING_INDEX(stocknumber,' ',-1) AS SIGNED)) FROM items WHERE stocknumber LIKE ?");
-        $sth->execute($code.' %');
-        
-        if ( my $max = $sth->fetchrow ) {
-            $template->param(
-                return => $code.' '.sprintf('%010s',($max+1)),
-            );
+    if ( $code =~ m/^[A-Z]+$/ ) {
+        my $sth = $dbh->prepare("SELECT lib FROM authorised_values WHERE category='INVENTORY_NUMBER' 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_NUMBER' 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
+        # The user entered a custom value, we don't touch it, this could be handled in js
     } else {
-        $template->param(
-            return => $code,
-        );
+        $template->param( return => $code, );
     }
+
     output_html_with_http_headers $input, $cookie, $template->output;
 }
 
-- 
1.7.7.3