Merge remote-tracking branch 'kc/new/bug_5449' into kcmaster
[koha.git] / serials / subscription-add.pl
index 242f7b4..7fcccdf 100755 (executable)
@@ -39,12 +39,18 @@ my $op = $query->param('op') || '';
 my $dbh = C4::Context->dbh;
 my $sub_length;
 
+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 ($template, $loggedinuser, $cookie)
 = get_template_and_user({template_name => "serials/subscription-add.tmpl",
                                query => $query,
                                type => "intranet",
                                authnotrequired => 0,
-                               flagsrequired => {serials => 1},
+                               flagsrequired => {serials => $permission},
                                debug => 1,
                                });
 
@@ -79,7 +85,9 @@ if ($op eq 'mod' || $op eq 'dup' || $op eq 'modsubscription') {
             $subs->{$_} = format_date($subs->{$_});
         }
          }
-    $subs->{'letter'}='' unless($subs->{'letter'});
+      if (!defined $subs->{letter}) {
+          $subs->{letter}= q{};
+      }
     letter_loop($subs->{'letter'}, $template);
     $nextexpected = GetNextExpected($subscriptionid);
     $nextexpected->{'isfirstissue'} = $nextexpected->{planneddate}->output('iso') eq $firstissuedate ;
@@ -93,7 +101,7 @@ 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,
@@ -115,7 +123,6 @@ my $branches = GetBranches($onlymine);
 my $branchloop;
 for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %{$branches}) {
     my $selected = 0;
-    $selected = 1 if ($thisbranch eq C4::Context->userenv->{'branch'});
     $selected = 1 if (defined($subs) && $thisbranch eq $subs->{'branchcode'});
     push @{$branchloop}, {
         value => $thisbranch,
@@ -123,13 +130,18 @@ for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{b
         branchname => $branches->{$thisbranch}->{'branchname'},
     };
 }
+
+my $locations_loop = GetAuthorisedValues("LOC",$subs->{'location'});
+
 $template->param(branchloop => $branchloop,
     DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
+    locations_loop=>$locations_loop,
 );
-my $count = 0;
 # prepare template variables common to all $op conditions:
-$template->param(  'dateformat_' . C4::Context->preference('dateformat') => 1 ,
-                );
+$template->param(  'dateformat_' . C4::Context->preference('dateformat') => 1 );
+if ($op!~/^mod/) {
+    letter_loop(q{}, $template);
+}
 
 if ($op eq 'addsubscription') {
     redirect_add_subscription();
@@ -146,10 +158,9 @@ if ($op eq 'addsubscription') {
            }
            push( @sub_type_data, \%row );
         }
-    $template->param(subtype => \@sub_type_data,
-       );
+    $template->param(subtype => \@sub_type_data);
 
-    letter_loop('', $template);
+    letter_loop( '', $template ) if ($op ne 'modsubscription' && $op ne 'dup' && $op ne 'mod');
 
     my $new_biblionumber = $query->param('biblionumber_for_new_subscription');
     if (defined $new_biblionumber) {
@@ -165,16 +176,15 @@ if ($op eq 'addsubscription') {
 sub letter_loop {
     my ($selected_letter, $templte) = @_;
     my $letters = GetLetters('serial');
-    my @letterloop;
-    foreach my $thisletter (keys %$letters) {
-        my $selected = $thisletter eq $selected_letter ? 1 : 0;
-        push @letterloop, {
+    my $letterloop;
+    foreach my $thisletter (keys %{$letters}) {
+        push @{$letterloop}, {
             value => $thisletter,
-            selected => $selected,
+            selected => $thisletter eq $selected_letter,
             lettername => $letters->{$thisletter},
         };
     }
-    $templte->param(letterloop => \@letterloop) if @letterloop;
+    $templte->param(letterloop => $letterloop);
     return;
 }
 
@@ -189,52 +199,52 @@ sub _get_sub_length {
 }
 
 sub redirect_add_subscription {
-    my $auser           = $query->param('user');
-    my $branchcode      = $query->param('branchcode');
-    my $aqbooksellerid  = $query->param('aqbooksellerid');
-    my $cost            = $query->param('cost');
-    my $aqbudgetid      = $query->param('aqbudgetid');
-    my $periodicity     = $query->param('periodicity');
-    my $dow             = $query->param('dow');
-    my @irregularity    = $query->param('irregularity_select');
-    my $numberpattern   = $query->param('numbering_pattern');
-    my $graceperiod     = $query->param('graceperiod') || 0;
+    my $auser          = $query->param('user');
+    my $branchcode     = $query->param('branchcode');
+    my $aqbooksellerid = $query->param('aqbooksellerid');
+    my $cost           = $query->param('cost');
+    my $aqbudgetid     = $query->param('aqbudgetid');
+    my $periodicity    = $query->param('periodicity');
+    my $dow            = $query->param('dow');
+    my @irregularity   = $query->param('irregularity_select');
+    my $numberpattern  = $query->param('numbering_pattern');
+    my $graceperiod    = $query->param('graceperiod') || 0;
 
-    my ($numberlength, $weeklength, $monthlength)
+    my ( $numberlength, $weeklength, $monthlength )
         = _get_sub_length( $query->param('subtype'), $query->param('sublength') );
-    my $add1 = $query->param('add1');
-    my $every1 = $query->param('every1');
-    my $whenmorethan1 = $query->param('whenmorethan1');
-    my $setto1 = $query->param('setto1');
-    my $lastvalue1 = $query->param('lastvalue1');
-    my $innerloop1 =$query->param('innerloop1');
-    my $add2 = $query->param('add2');
-    my $every2 = $query->param('every2');
-    my $whenmorethan2 = $query->param('whenmorethan2');
-    my $setto2 = $query->param('setto2');
-    my $innerloop2 =$query->param('innerloop2');
-    my $lastvalue2 = $query->param('lastvalue2');
-    my $add3 = $query->param('add3');
-    my $every3 = $query->param('every3');
-    my $whenmorethan3 = $query->param('whenmorethan3');
-    my $setto3 = $query->param('setto3');
-    my $lastvalue3 = $query->param('lastvalue3');
-    my $innerloop3 =$query->param('innerloop3');
-    my $numberingmethod = $query->param('numberingmethod');
-    my $status = 1;
-    my $biblionumber = $query->param('biblionumber');
-    my $callnumber = $query->param('callnumber');
-    my $notes = $query->param('notes');
-    my $internalnotes = $query->param('internalnotes');
-    my $hemisphere = $query->param('hemisphere') || 1;
-       my $letter = $query->param('letter');
-    my $manualhistory = $query->param('manualhist');
-    my $serialsadditems = $query->param('serialsadditems');
-       my $staffdisplaycount = $query->param('staffdisplaycount');
-       my $opacdisplaycount = $query->param('opacdisplaycount');
-    my $location = $query->param('location');
-    my $startdate       = format_date_in_iso($query->param('startdate'));
-    my $enddate       = format_date_in_iso($query->param('enddate'));
+    my $add1              = $query->param('add1');
+    my $every1            = $query->param('every1');
+    my $whenmorethan1     = $query->param('whenmorethan1');
+    my $setto1            = $query->param('setto1');
+    my $lastvalue1        = $query->param('lastvalue1');
+    my $innerloop1        = $query->param('innerloop1');
+    my $add2              = $query->param('add2');
+    my $every2            = $query->param('every2');
+    my $whenmorethan2     = $query->param('whenmorethan2');
+    my $setto2            = $query->param('setto2');
+    my $innerloop2        = $query->param('innerloop2');
+    my $lastvalue2        = $query->param('lastvalue2');
+    my $add3              = $query->param('add3');
+    my $every3            = $query->param('every3');
+    my $whenmorethan3     = $query->param('whenmorethan3');
+    my $setto3            = $query->param('setto3');
+    my $lastvalue3        = $query->param('lastvalue3');
+    my $innerloop3        = $query->param('innerloop3');
+    my $numberingmethod   = $query->param('numberingmethod');
+    my $status            = 1;
+    my $biblionumber      = $query->param('biblionumber');
+    my $callnumber        = $query->param('callnumber');
+    my $notes             = $query->param('notes');
+    my $internalnotes     = $query->param('internalnotes');
+    my $hemisphere        = $query->param('hemisphere') || 1;
+    my $letter            = $query->param('letter');
+    my $manualhistory     = $query->param('manualhist');
+    my $serialsadditems   = $query->param('serialsadditems');
+    my $staffdisplaycount = $query->param('staffdisplaycount');
+    my $opacdisplaycount  = $query->param('opacdisplaycount');
+    my $location          = $query->param('location');
+    my $startdate = format_date_in_iso( $query->param('startdate') );
+    my $enddate = format_date_in_iso( $query->param('enddate') );
     my $firstacquidate  = format_date_in_iso($query->param('firstacquidate'));
     my $histenddate = format_date_in_iso($query->param('histenddate'));
     my $histstartdate = format_date_in_iso($query->param('histstartdate'));