Bug 12909 - item withdrawn is missing in inventory results
[srvgit] / tools / batchMod.pl
index 8cf1204..ea9c856 100755 (executable)
@@ -33,6 +33,7 @@ use C4::BackgroundJob;
 use C4::ClassSource;
 use C4::Dates;
 use C4::Debug;
+use C4::Members;
 use MARC::File::XML;
 use List::MoreUtils qw/uniq/;
 
@@ -69,6 +70,11 @@ my ($template, $loggedinuser, $cookie)
                  flagsrequired => $template_flag,
                  });
 
+# Does the user have a restricted item edition permission?
+my $uid = $loggedinuser ? GetMember( borrowernumber => $loggedinuser )->{userid} : undef;
+my $restrictededition = $uid ? haspermission($uid,  {'tools' => 'items_batchmod_restricted'}) : undef;
+# In case user is a superlibrarian, edition is not restricted
+$restrictededition = 0 if ($restrictededition != 0 && C4::Context->IsSuperLibrarian());
 
 my $today_iso = C4::Dates->today('iso');
 $template->param(today_iso => $today_iso);
@@ -293,11 +299,19 @@ unshift (@$branches, $nochange_branch);
 
 my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
 
+# Getting list of subfields to keep when restricted batchmod edit is enabled
+my $subfieldsToAllowForBatchmod = C4::Context->preference('SubfieldsToAllowForRestrictedBatchmod');
+my $allowAllSubfields = (
+    not defined $subfieldsToAllowForBatchmod
+      or $subfieldsToAllowForBatchmod == q||
+) ? 1 : 0;
+my @subfieldsToAllow = split(/ /, $subfieldsToAllowForBatchmod);
 
 foreach my $tag (sort keys %{$tagslib}) {
     # loop through each subfield
     foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
        next if subfield_is_koha_internal_p($subfield);
+        next if (not $allowAllSubfields and $restrictededition && !grep { $tag . '$' . $subfield eq $_ } @subfieldsToAllow );
        next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
         # barcode and stocknumber are not meant to be batch-modified
        next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode';