Bug 7688: Change subscription numbering pattern and frequencies
[koha.git] / serials / subscription-numberpatterns.pl
diff --git a/serials/subscription-numberpatterns.pl b/serials/subscription-numberpatterns.pl
new file mode 100755 (executable)
index 0000000..2647672
--- /dev/null
@@ -0,0 +1,150 @@
+#!/usr/bin/perl
+
+# Copyright 2011 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.
+
+=head1 NAME
+
+subscription-numberpatterns.pl
+
+=head1 DESCRIPTION
+
+Manage numbering patterns
+
+=cut
+
+use Modern::Perl;
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+use C4::Serials::Numberpattern;
+use C4::Serials::Frequency;
+
+my $input = new CGI;
+my ($template, $loggedinuser, $cookie, $flags) = get_template_and_user( {
+    template_name   => 'serials/subscription-numberpatterns.tt',
+    query           => $input,
+    type            => 'intranet',
+    authnotrequired => 0,
+    flagsrequired   => { 'parameters' => 1 }
+} );
+
+my $op = $input->param('op');
+
+if($op && $op eq 'savenew') {
+    my $label = $input->param('label');
+    my $numberpattern;
+    foreach(qw/ label description numberingmethod displayorder
+      label1 label2 label3 add1 add2 add3 every1 every2 every3
+      setto1 setto2 setto3 whenmorethan1 whenmorethan2 whenmorethan3
+      numbering1 numbering2 numbering3 /) {
+        $numberpattern->{$_} = $input->param($_);
+        if($numberpattern->{$_} and $numberpattern->{$_} eq '') {
+            $numberpattern->{$_} = undef;
+        }
+    }
+    my $numberpattern2 = GetSubscriptionNumberpatternByName($label);
+
+    if(!defined $numberpattern2) {
+        AddSubscriptionNumberpattern($numberpattern);
+    } else {
+        $op = 'new';
+        $template->param(error_existing_numberpattern => 1);
+        $template->param(%$numberpattern);
+    }
+} elsif ($op && $op eq 'savemod') {
+    my $id = $input->param('id');
+    my $label = $input->param('label');
+    my $numberpattern = GetSubscriptionNumberpattern($id);
+    my $mod_ok = 1;
+    if($numberpattern->{'label'} ne $label) {
+        my $numberpattern2 = GetSubscriptionNumberpatternByName($label);
+        if(defined $numberpattern2 && $id != $numberpattern2->{'id'}) {
+            $mod_ok = 0;
+        }
+    }
+    if($mod_ok) {
+        foreach(qw/ id label description numberingmethod displayorder
+          label1 label2 label3 add1 add2 add3 every1 every2 every3
+          setto1 setto2 setto3 whenmorethan1 whenmorethan2 whenmorethan3
+          numbering1 numbering2 numbering3 /) {
+            $numberpattern->{$_} = $input->param($_) || undef;
+        }
+        ModSubscriptionNumberpattern($numberpattern);
+    } else {
+        $op = 'modify';
+        $template->param(error_existing_numberpattern => 1);
+    }
+}
+
+if($op && ($op eq 'new' || $op eq 'modify')) {
+    if($op eq 'modify') {
+        my $id = $input->param('id');
+        if(defined $id) {
+            my $numberpattern = GetSubscriptionNumberpattern($id);
+            $template->param(%$numberpattern);
+        } else {
+            $op = 'new';
+        }
+    }
+    my @frequencies = GetSubscriptionFrequencies();
+    my @subtypes;
+    push @subtypes, { value => $_ } for (qw/ issues weeks months /);
+    my @locales = map {
+        chomp;
+        /^C|^POSIX$/ ? () : $_
+    } `locale -a`;
+
+    $template->param(
+        $op => 1,
+        frequencies_loop => \@frequencies,
+        subtypes_loop => \@subtypes,
+        locales => \@locales,
+        DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
+    );
+    output_html_with_http_headers $input, $cookie, $template->output;
+    exit;
+}
+
+if($op && $op eq 'del') {
+    my $id = $input->param('id');
+    if ($id) {
+        my $confirm = $input->param('confirm');
+        if ($confirm) {
+            DelSubscriptionNumberpattern($id);
+        } else {
+            my @subs = GetSubscriptionsWithNumberpattern($id);
+            if (@subs) {
+                $template->param(
+                    id => $id,
+                    still_used => 1,
+                    subscriptions => \@subs
+                );
+            } else {
+                DelSubscriptionNumberpattern($id);
+            }
+        }
+    }
+}
+
+my @numberpatterns_loop = GetSubscriptionNumberpatterns();
+
+$template->param(
+    numberpatterns_loop => \@numberpatterns_loop,
+);
+
+output_html_with_http_headers $input, $cookie, $template->output;