stocknumber in YEAR-NR format
[koha.git] / cataloguing / value_builder / ffzg-stocknumber.pl
index ab88f61..0239f37 100755 (executable)
@@ -25,15 +25,28 @@ use C4::Context;
 
 =head1 DESCRIPTION
 
-This plugin is specific to AM123 but could be used as a base for similar operations.
+This plugin is specific to FFZG but could be used as a base for similar operations.
 It is used for stocknumber computation.
 
-If the user send an empty string, we return a simple incremented stocknumber.
+If the user send an empty string, we return a simple incremented stocknumber for current year.
 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
+In this case, a stocknumber has this form : "YEAR-0009678570".
+ - YEAR is numeric 4-digit year, like 2012
+ - dash
+ - digits, without leading zero
+
+Required database changes:
+
+  create unique index item_stocknumer on items(stocknumber) ;
+
+  create table ffzg_inventarna_knjiga (
+       id int not null auto_increment primary key,
+       year int not null,
+       num int not null,
+       biblionumber int not null,
+       last_update timestamp default current_timestamp on update current_timestamp,
+       unique index ffzg_inv_br(year,num)
+  ) ;
 
 =cut
 
@@ -42,6 +55,7 @@ sub plugin_parameters {
 
 sub plugin_javascript {
     my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_;
+
     my $res="
     <script type='text/javascript'>
         function Focus$field_number() {
@@ -49,8 +63,12 @@ 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 url = '../cataloguing/plugin_launcher.pl?plugin_name=ffzg-stocknumber.pl&code=' + code.value;
                 var blurcallbackstocknumber = {
                     success: function(o) {
                         var field = document.getElementById('$field_number');
@@ -59,10 +77,6 @@ sub plugin_javascript {
                     }
                 }
                 var transaction = YAHOO.util.Connect.asyncRequest('GET',url, blurcallbackstocknumber, null);
-                return 1;
-        }
-
-        function Clic$field_number() {
             return 1;
         }
     </script>
@@ -73,7 +87,14 @@ sub plugin_javascript {
 
 sub plugin {
     my ($input) = @_;
+
+
     my $code = $input->param('code');
+       my ( $year, $num ) = split(/-/,$code);
+
+    $year = (localtime)[5] + 1900 unless $year;
+
+warn "XXX plugin code = $code";
 
     my ($template, $loggedinuser, $cookie) = get_template_and_user({
         template_name   => "cataloguing/value_builder/ajax.tmpl",
@@ -84,33 +105,31 @@ sub plugin {
         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)),
-            );
-        }
-    # The user entered a custom value, we don't touch it, this could be handled in js
-    } else {
-        $template->param(
-            return => $code,
-        );
-    }
+       if ( ! $num ) {
+
+                       my $dbh = C4::Context->dbh;
+
+                       $dbh->begin_work;
+
+                       my $sth = $dbh->prepare("select max(num) from ffzg_inventarna_knjiga where year = ?");
+                       $sth->execute($year);
+                       
+                       my $max = $sth->fetchrow; # return null without any data
+                       $max += 1;
+
+                       $sth = $dbh->prepare("insert into ffzg_inventarna_knjiga (year,num) values (?,?)");
+                       $sth->execute( $year, $max );
+
+                       $dbh->commit;
+
+                       $num = $max;
+
+       }
+
+       $template->param(
+               return => $year . '-' . $num,
+       );
+
     output_html_with_http_headers $input, $cookie, $template->output;
 }