Bug 22098: Update stocknumberAV cataloguing plugin to use objects
[koha-equinox.git] / cataloguing / value_builder / stocknumberAV.pl
1 #!/usr/bin/perl
2
3 # Converted to new plugin style (Bug 13437)
4
5 # Copyright 2012 BibLibre SARL
6 #
7 # This file is part of Koha.
8 #
9 # Koha is free software; you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 3 of the License, or
12 # (at your option) any later version.
13 #
14 # Koha is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with Koha; if not, see <http://www.gnu.org/licenses>.
21
22 use Modern::Perl;
23 use CGI qw ( -utf8 );
24
25 use C4::Auth;
26 use C4::Output;
27 use Koha::AuthorisedValues;
28
29 =head1 DESCRIPTION
30
31 This plugin is based on authorised values INVENTORY.
32 It is used for stocknumber computation.
33
34 If no prefix is submitted, or prefix does not contain only nubers, it returns the inserted code (= keep a field unchanged)
35 If a prefix is submited, we look for the highest stocknumber with this prefix, and return it incremented.
36 In this case, a stocknumber has this form : "PREFIX 0009678570".
37  - PREFIX contains of letters
38  - a space separator
39  - 10 digits, with leading 0s if needed
40
41 =cut
42
43 my $builder = sub {
44     my ( $params ) = @_;
45     my $res = qq{
46     <script>
47         function Click$params->{id}() {
48                 var code = document.getElementById('$params->{id}');
49                 \$.ajax({
50                     url: '/cgi-bin/koha/cataloguing/plugin_launcher.pl',
51                     type: 'POST',
52                     data: {
53                         'plugin_name': 'stocknumberAV.pl',
54                         'code'    : code.value,
55                     },
56                     success: function(data){
57                         var field = document.getElementById('$params->{id}');
58                         field.value = data;
59                         return 1;
60                     }
61                 });
62         }
63     </script>
64     };
65
66     return $res;
67 };
68
69 my $launcher = sub {
70     my ( $params ) = @_;
71     my $input = $params->{cgi};
72     my $code = $input->param('code');
73
74     my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
75         {   template_name   => "cataloguing/value_builder/ajax.tt",
76             query           => $input,
77             type            => "intranet",
78             authnotrequired => 0,
79             flagsrequired   => { editcatalogue => '*' },
80             debug           => 1,
81         }
82     );
83
84     # If a prefix is submited, we look for the highest stocknumber with this prefix, and return it incremented
85     $code =~ s/ *$//g;
86     if ( $code =~ m/^[a-zA-Z]+$/ ) {
87         my $av = Koha::AuthorisedValues->find({
88             'category' => 'INVENTORY',
89             'authorised_value' => $code
90         });
91         if ( $av ) {
92             $av->lib($av->lib + 1);
93             $av->store;
94             $template->param( return => $code . ' ' . sprintf( '%010s', ( $av->lib ) ), );
95         } else {
96             $template->param( return => "There is no defined value for $code");
97         }
98         # The user entered a custom value, we don't touch it, this could be handled in js
99     } else {
100         $template->param( return => $code, );
101     }
102
103     output_html_with_http_headers $input, $cookie, $template->output;
104 };
105
106 return { builder => $builder, launcher => $launcher };