diff --git a/C4/Koha.pm b/C4/Koha.pm
index fbce23192e..74da5f00ac 100644
--- a/C4/Koha.pm
+++ b/C4/Koha.pm
@@ -503,8 +503,11 @@ C<$opac> If set to a true value, displays OPAC descriptions rather than normal o
=cut
sub GetAuthorisedValues {
- my $category = shift // ''; # optional parameter
- my $opac = shift ? 1 : 0; # normalise to be safe
+ my $category = shift // ''; # optional parameter
+ my $opac = shift ? 1 : 0; # normalise to be safe
+ my $options = shift // '';
+ my $no_limit;
+ if ($options) { $no_limit = $options->{'no_limit'}; } #optional parameter to ignore library limitation
# Is this cached already?
my $branch_limit = C4::Context::mybranch();
@@ -515,26 +518,34 @@ sub GetAuthorisedValues {
my @results;
my $dbh = C4::Context->dbh;
+
+ my $select_clause = 'SELECT av.*';
+ my @where_args;
+ if ( $branch_limit && $no_limit ) {
+ $select_clause .= ', IF (branchcode = ? OR branchcode IS NULL, 0, 1) as restricted';
+ push @where_args, $branch_limit;
+ }
+
my $query = qq{
- SELECT DISTINCT av.*
+ $select_clause
FROM authorised_values av
};
$query .= qq{
LEFT JOIN authorised_values_branches ON ( id = av_id )
} if $branch_limit;
my @where_strings;
- my @where_args;
-
- if ($category) {
+ if($category) {
push @where_strings, "category = ?";
push @where_args, $category;
}
- if ($branch_limit) {
+
+ if ( $branch_limit && !defined $no_limit ) {
push @where_strings, "( branchcode = ? OR branchcode IS NULL )";
push @where_args, $branch_limit;
}
- if ( @where_strings > 0 ) {
- $query .= " WHERE " . join( " AND ", @where_strings );
+
+ if(@where_strings > 0) {
+ $query .= " WHERE " . join(" AND ", @where_strings);
}
$query .= ' ORDER BY category, '
. (
diff --git a/Koha/UI/Form/Builder/Item.pm b/Koha/UI/Form/Builder/Item.pm
index 907a8ebb2c..6a16e8317e 100644
--- a/Koha/UI/Form/Builder/Item.pm
+++ b/Koha/UI/Form/Builder/Item.pm
@@ -169,6 +169,7 @@ sub generate_subfield_form {
if ( $subfield->{authorised_value} ) {
my @authorised_values;
my %authorised_lib;
+ my %restricted_values;
# builds list, depending on authorised value...
if ( $subfield->{authorised_value} eq "LOST" ) {
@@ -202,15 +203,22 @@ sub generate_subfield_form {
}
} elsif ( $subfield->{authorised_value} eq "itemtypes" ) {
push @authorised_values, "";
- my $itemtypes = Koha::ItemTypes->new;
+ my $all_itemtypes = Koha::ItemTypes->search_with_localization;
+ my $filtered_itemtypes;
if ($branch_limit) {
- $itemtypes = $itemtypes->search_with_library_limits( {}, {}, $branch_limit );
+ $filtered_itemtypes = Koha::ItemTypes->search_with_localization( { branchcode => $branch_limit } );
+ } else {
+ $filtered_itemtypes = $all_itemtypes;
}
- $itemtypes = $itemtypes->order_by_translated_description;
- while ( my $itemtype = $itemtypes->next ) {
+ while (my $itemtype = $filtered_itemtypes->next) {
push @authorised_values, $itemtype->itemtype;
$authorised_lib{ $itemtype->itemtype } = $itemtype->translated_description;
}
+ while (my $itemtype = $all_itemtypes->next) {
+ if (!grep { $_ eq $itemtype->itemtype } @authorised_values) {
+ $restricted_values{ $itemtype->itemtype } = $itemtype->translated_description;
+ }
+ }
if ( !$value && $biblionumber ) {
my $itype_sth = $dbh->prepare("SELECT itemtype FROM biblioitems WHERE biblionumber = ?");
@@ -244,10 +252,11 @@ sub generate_subfield_form {
#---- "true" authorised value
} else {
push @authorised_values, qq{};
- my $av = GetAuthorisedValues( $subfield->{authorised_value} );
+ my $av = GetAuthorisedValues( $subfield->{authorised_value}, undef, { 'no_limit' => 1 } );
for my $r (@$av) {
push @authorised_values, $r->{authorised_value};
$authorised_lib{ $r->{authorised_value} } = $r->{lib};
+ $restricted_values{ $r->{authorised_value} } = $r->{restricted};
}
}
@@ -265,11 +274,12 @@ sub generate_subfield_form {
};
} else {
$subfield_data{marc_value} = {
- type => 'select',
- id => "tag_" . $tag . "_subfield_" . $subfieldtag . "_" . $index_subfield,
- values => \@authorised_values,
- labels => \%authorised_lib,
- default => $value,
+ type => 'select',
+ id => "tag_" . $tag . "_subfield_" . $subfieldtag . "_" . $index_subfield,
+ values => \@authorised_values,
+ labels => \%authorised_lib,
+ restricted => \%restricted_values,
+ default => $value,
(
( grep { $_ eq $subfield->{authorised_value} } (qw(branches itemtypes cn_source)) )
? ()
@@ -277,6 +287,7 @@ sub generate_subfield_form {
),
};
}
+
}
# it's a thesaurus / authority field
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc
index 5a555c8f6f..c1e8741063 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc
@@ -135,20 +135,32 @@
[% FOREACH aval IN mv.values %]
[% IF aval == mv.default %]
[% SET matched = 1 %]
-
+ [% IF mv.restricted.$aval %]
+
+ [% ELSE %]
+
+ [% END %]
[% ELSE %]
[% IF subfield.IS_LOST_AV && Koha.Preference("ClaimReturnedLostValue") && aval == Koha.Preference("ClaimReturnedLostValue") %]
[% ELSIF subfield.IS_LOST_AV && Koha.Preference("BundleLostValue") && aval == Koha.Preference("BundleLostValue") %]
[% ELSE %]
-
+ [% UNLESS mv.restricted.$aval %]
+
+ [% END %]
[% END %]
[% END %]
[% END %]
[% UNLESS matched || ( ( kohafield == 'items.damaged' || kohafield == 'items.itemlost' || kohafield == 'items.withdrawn' || kohafield == 'items.notforloan' ) && mv.default == '0' ) %]
[%# If the current value is not in the authorised list and is not a field where 0 means unset #%]
-
+ [% IF mv.restricted %]
+ [% FOREACH code IN mv.restricted.keys %]
+ [% IF mv.default == code %]
+
+ [% END %]
+ [% END %]
+ [% END %]
[% END %]
[% UNLESS matched || ( ( kohafield == 'items.damaged' || kohafield == 'items.itemlost' || kohafield == 'items.withdrawn' || kohafield == 'items.notforloan' ) && mv.default == '0' ) %]