Merge branch 'bug_8300' into 3.14-master
[koha.git] / serials / subscription-add.pl
index b8d9a96..10bccd1 100755 (executable)
@@ -34,7 +34,7 @@ use Carp;
 
 #use Smart::Comments;
 
-my $query = CGI->new;
+our $query = CGI->new;
 my $op = $query->param('op') || '';
 my $dbh = C4::Context->dbh;
 my $sub_length;
@@ -43,7 +43,7 @@ my @budgets;
 
 # Permission needed if it is a modification : edit_subscription
 # Permission needed otherwise (nothing or dup) : create_subscription
-my $permission = ($op eq "mod") ? "edit_subscription" : "create_subscription";
+my $permission = ($op eq "modify") ? "edit_subscription" : "create_subscription";
 
 my ($template, $loggedinuser, $cookie)
 = get_template_and_user({template_name => "serials/subscription-add.tmpl",
@@ -63,19 +63,18 @@ my @subscription_types = (
 my @sub_type_data;
 
 my $subs;
-my $firstissuedate;
-my $nextexpected;
+our $firstissuedate;
 
-if ($op eq 'mod' || $op eq 'dup' || $op eq 'modsubscription') {
+if ($op eq 'modify' || $op eq 'dup' || $op eq 'modsubscription') {
 
     my $subscriptionid = $query->param('subscriptionid');
     $subs = GetSubscription($subscriptionid);
 ## FIXME : Check rights to edit if mod. Could/Should display an error message.
-    if ($subs->{'cannotedit'} && $op eq 'mod'){
+    if ($subs->{'cannotedit'} && $op eq 'modify'){
       carp "Attempt to modify subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed";
       print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
     }
-    $firstissuedate = $subs->{firstacquidate};  # in iso format.
+    $firstissuedate = $subs->{firstacquidate} || '';  # in iso format.
     for (qw(startdate firstacquidate histstartdate enddate histenddate)) {
         next unless defined $subs->{$_};
        # TODO : Handle date formats properly.
@@ -89,11 +88,11 @@ if ($op eq 'mod' || $op eq 'dup' || $op eq 'modsubscription') {
           $subs->{letter}= q{};
       }
     letter_loop($subs->{'letter'}, $template);
-    $nextexpected = GetNextExpected($subscriptionid);
+    my $nextexpected = GetNextExpected($subscriptionid);
     $nextexpected->{'isfirstissue'} = $nextexpected->{planneddate}->output('iso') eq $firstissuedate ;
-    $subs->{nextacquidate} = $nextexpected->{planneddate}->output()  if($op eq 'mod');
+    $subs->{nextacquidate} = $nextexpected->{planneddate}->output()  if($op eq 'modify');
     unless($op eq 'modsubscription') {
-               foreach my $length_unit qw(numberlength weeklength monthlength){
+        foreach my $length_unit (qw(numberlength weeklength monthlength)) {
                        if ($subs->{$length_unit}){
                                $sub_length=$subs->{$length_unit};
                                $sub_on=$length_unit;
@@ -101,18 +100,24 @@ if ($op eq 'mod' || $op eq 'dup' || $op eq 'modsubscription') {
                        }
                }
 
-        $template->param($subs);
+        $template->param( %{$subs} );
         $template->param("dow".$subs->{'dow'} => 1) if defined $subs->{'dow'};
         $template->param(
                     $op => 1,
                     "subtype_$sub_on" => 1,
                     sublength =>$sub_length,
-                    history => ($op eq 'mod'),
+                    history => ($op eq 'modify'),
                     "periodicity".$subs->{'periodicity'} => 1,
                     "numberpattern".$subs->{'numberpattern'} => 1,
                     firstacquiyear => substr($firstissuedate,0,4),
                     );
     }
+
+    if ( $op eq 'dup' ) {
+        my $dont_copy_fields = C4::Context->preference('SubscriptionDuplicateDroppedInput');
+        my @fields_id = map { fieldid => $_ }, split '\|', $dont_copy_fields;
+        $template->param( dont_export_field_loop => \@fields_id );
+    }
 }
 
 my $onlymine=C4::Context->preference('IndependantBranches') &&
@@ -134,11 +139,9 @@ for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{b
 my $locations_loop = GetAuthorisedValues("LOC",$subs->{'location'});
 
 $template->param(branchloop => $branchloop,
-    DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
     locations_loop=>$locations_loop,
 );
 # prepare template variables common to all $op conditions:
-$template->param(  'dateformat_' . C4::Context->preference('dateformat') => 1 );
 if ($op!~/^mod/) {
     letter_loop(q{}, $template);
 }
@@ -160,6 +163,7 @@ if ($op eq 'addsubscription') {
         }
     $template->param(subtype => \@sub_type_data);
 
+    letter_loop( '', $template ) if ($op ne 'modsubscription' && $op ne 'dup' && $op ne 'modify');
 
     my $new_biblionumber = $query->param('biblionumber_for_new_subscription');
     if (defined $new_biblionumber) {
@@ -169,6 +173,7 @@ if ($op eq 'addsubscription') {
             $template->param(bibliotitle => $bib->{title});
         }
     }
+        $template->param((uc(C4::Context->preference("marcflavour"))) => 1);
        output_html_with_http_headers $query, $cookie, $template->output;
 }
 
@@ -325,6 +330,7 @@ sub redirect_mod_subscription {
        my $opacdisplaycount = $query->param('opacdisplaycount');
     my $graceperiod     = $query->param('graceperiod') || 0;
     my $location = $query->param('location');
+    my $nextexpected = GetNextExpected($subscriptionid);
        #  If it's  a mod, we need to check the current 'expected' issue, and mod it in the serials table if necessary.
     if ( $nextacquidate ne $nextexpected->{planneddate}->output('iso') ) {
         ModNextExpected($subscriptionid,C4::Dates->new($nextacquidate,'iso'));