Bug 17600: Standardize our EXPORT_OK
[koha-ffzg.git] / cataloguing / value_builder / stocknumberAV.pl
index 0578d44..793cf10 100755 (executable)
@@ -1,58 +1,54 @@
 #!/usr/bin/perl
 
+# Converted to new plugin style (Bug 13437)
+
 # 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 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 3 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.
+# 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.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-use C4::Auth;
-use CGI;
-use C4::Context;
+use CGI qw ( -utf8 );
+
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
+use Koha::AuthorisedValues;
 
 =head1 DESCRIPTION
 
-This plugin is based on authorised values INVENTORY.
+This plugin is based on authorised values from 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
+If no prefix is submitted, or the prefix does contain only
+numbers, it returns the inserted code (= keep the field unchanged).
 
-=cut
+If a prefix is submitted, we look for the highest stocknumber
+with this prefix and return it incremented.
 
-sub plugin_parameters {
-}
-
-sub plugin_javascript {
-    my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_;
-    my $res = qq{
-    <script type='text/javascript'>
-        function Focus$field_number() {
-            return 1;
-        }
+In this case, a stocknumber has this form (e.g. "PREFIX 0009678570"):
+PREFIX containing letters, a space separator and 10 digits with leading
+0s if needed.
 
-        function Blur$field_number() {
-                return 1;
-        }
+=cut
 
-        function Clic$field_number() {
-                var code = document.getElementById('$field_number');
+my $builder = sub {
+    my ( $params ) = @_;
+    my $res = qq{
+    <script>
+        function Click$params->{id}() {
+                var code = document.getElementById('$params->{id}');
                 \$.ajax({
                     url: '/cgi-bin/koha/cataloguing/plugin_launcher.pl',
                     type: 'POST',
@@ -61,7 +57,7 @@ sub plugin_javascript {
                         'code'    : code.value,
                     },
                     success: function(data){
-                        var field = document.getElementById('$field_number');
+                        var field = document.getElementById('$params->{id}');
                         field.value = data;
                         return 1;
                     }
@@ -70,37 +66,35 @@ sub plugin_javascript {
     </script>
     };
 
-    return ($field_number,$res);
-}
+    return $res;
+};
 
-sub plugin {
-    my ($input) = @_;
+my $launcher = sub {
+    my ( $params ) = @_;
+    my $input = $params->{cgi};
     my $code = $input->param('code');
 
     my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
-        {   template_name   => "cataloguing/value_builder/ajax.tmpl",
+        {   template_name   => "cataloguing/value_builder/ajax.tt",
             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);
+    if ( $code =~ m/^[a-zA-Z]+$/ ) {
+        my $av = Koha::AuthorisedValues->find({
+            'category' => 'INVENTORY',
+            'authorised_value' => $code
+        });
+        if ( $av ) {
+            $av->lib($av->lib + 1);
+            $av->store;
+            $template->param( return => $code . ' ' . sprintf( '%010s', ( $av->lib ) ), );
         } else {
-                $template->param( return => "There is no defined value for $code");
+            $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 {
@@ -108,6 +102,6 @@ sub plugin {
     }
 
     output_html_with_http_headers $input, $cookie, $template->output;
-}
+};
 
-1;
+return { builder => $builder, launcher => $launcher };