Bug 33167: Cleanup staff detail page

This patch begins reduing some of the extra things we are doing in
detail.pl that could easily be handled in the templates - fetching
authorised values and branches etc

It also removes a loop to find items that should be hidden, and instead
uses a searh parameter

The template changes either use item object rather than passed
variables, or utilize plugins to fetch authorised valued

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Nick Clemens 2023-03-09 20:37:28 +00:00 committed by Tomas Cohen Arazi
parent aded943792
commit d650f8c2a6
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F
2 changed files with 45 additions and 103 deletions

View file

@ -190,15 +190,10 @@ $template->param(
);
my $itemtypes = { map { $_->itemtype => $_ } @{ Koha::ItemTypes->search_with_localization->as_list } };
my $all_items = $biblio->items->search_ordered;
my @items;
my $params;
my $patron = Koha::Patrons->find( $borrowernumber );
while ( my $item = $all_items->next ) {
push @items, $item
unless $item->itemlost
&& $patron->category->hidelostitems
&& !$showallitems;
}
$params->{ itemlost } = 0 if $patron->category->hidelostitems && !$showallitems;
my @items = $biblio->items->search_ordered( $params )->as_list;
# flag indicating existence of at least one item linked via a host record
my $hostrecords;
@ -210,6 +205,9 @@ if ( $hostitems->count ) {
}
my $dat = &GetBiblioData($biblionumber);
$dat->{'count'} = $biblio->items->count + $hostitems->count;
$dat->{'showncount'} = scalar @items;
$dat->{'hiddencount'} = $dat->{'count'} - $dat->{'showncount'};
#is biblio a collection and are bundles enabled
my $leader = $marc_record->leader();
@ -320,16 +318,6 @@ if ( defined $dat->{'itemtype'} ) {
$dat->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $dat->{itemtype} }->imageurl );
}
$dat->{'count'} = $all_items->count + $hostitems->count;
$dat->{'showncount'} = scalar @items + $hostitems->count;
$dat->{'hiddencount'} = $all_items->count + $hostitems->count - scalar @items;
my $shelflocations =
{ map { $_->{authorised_value} => $_->{lib} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => $fw, kohafield => 'items.location' } ) };
my $collections =
{ map { $_->{authorised_value} => $_->{lib} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => $fw, kohafield => 'items.ccode' } ) };
my $copynumbers =
{ map { $_->{authorised_value} => $_->{lib} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => $fw, kohafield => 'items.copynumber' } ) };
my (@itemloop, @otheritemloop, %itemfields);
my $mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.itemlost', authorised_value => [ -and => {'!=' => undef }, {'!=' => ''}] });
@ -371,14 +359,6 @@ foreach my $item (@items) {
my $item_info = $item->unblessed;
$item_info->{itemtype} = $itemtypes->{$item->effective_itemtype};
#get shelf location and collection code description if they are authorised value.
# same thing for copy number
my $shelfcode = $item->location;
$item_info->{'location'} = $shelflocations->{$shelfcode} if ( defined( $shelfcode ) && defined($shelflocations) && exists( $shelflocations->{$shelfcode} ) );
my $ccode = $item->ccode;
$item_info->{'ccode'} = $collections->{$ccode} if ( defined( $ccode ) && defined($collections) && exists( $collections->{$ccode} ) );
my $copynumber = $item->copynumber;
$item_info->{'copynumber'} = $copynumbers->{$copynumber} if ( defined($copynumber) && defined($copynumbers) && exists( $copynumbers->{$copynumber} ) );
foreach (qw(ccode enumchron copynumber stocknumber itemnotes itemnotes_nonpublic uri )) {
$itemfields{$_} = 1 if $item->$_;
}
@ -399,21 +379,6 @@ foreach my $item (@items) {
$item_info->{first_hold} = $first_hold;
}
$item_info->{checkout} = $item->checkout;
# Check the transit status
my $transfer = $item->get_transfer;
if ( $transfer ) {
$item_info->{transfer} = $transfer;
}
foreach my $f (qw( itemnotes )) {
if ($item_info->{$f}) {
$item_info->{$f} =~ s|\n|<br />|g;
$itemfields{$f} = 1;
}
}
#item has a host number if its biblio number does not match the current bib
if ($item->biblionumber ne $biblionumber){
@ -445,23 +410,6 @@ foreach my $item (@items) {
$item_info->{can_be_edited} = $patron->can_edit_items_from( $item->homebranch );
if ( C4::Context->preference("LocalCoverImages") == 1 ) {
$item_info->{cover_images} = $item->cover_images;
}
if ( C4::Context->preference('UseRecalls') ) {
$item_info->{recall} = $item->recall;
}
if ( C4::Context->preference('IndependentBranches') ) {
my $userenv = C4::Context->userenv();
if ( not C4::Context->IsSuperLibrarian()
and $userenv->{branch} ne $item->homebranch ) {
$item_info->{cannot_be_edited} = 1;
$item_info->{not_same_branch} = 1;
}
}
if ( $item->is_bundle ) {
$item_info->{bundled} =
$item->bundle_items->search( { itemlost => { '!=' => 0 } } )

View file

@ -386,7 +386,7 @@
<td class="cover">
<div class="bookcoverimg">
<div class="cover-slider">
[% FOREACH image IN item.cover_images %]
[% FOREACH image IN item.object.cover_images %]
<div class="cover-image local-coverimg">
<a href="/cgi-bin/koha/catalogue/image.pl?itemnumber=[% image.itemnumber | uri %]&amp;imagenumber=[% image.imagenumber | uri %]" title="Local cover image">
<img src="/cgi-bin/koha/catalogue/image.pl?thumbnail=1&amp;imagenumber=[% image.imagenumber | uri %]" alt="Local cover image" data-link="/cgi-bin/koha/catalogue/imageviewer.pl?itemnumber=[% item.itemnumber | uri %]&amp;imagenumber=[% image.imagenumber | uri %]" />
@ -411,22 +411,23 @@
<td class="homebranch">
<span class="homebranchdesc">[% Branches.GetName(item.homebranch) | html %]</span>
<span class="shelvingloc">
<!--
If permanent location is defined, show description or code and display current location in parentheses. If not, display current location.
Note that permanent location is a code, and location may be an authval.
-->
[%# If permanent location is defined, show description or code and
display current location in parentheses. If not, display current location.
Note that permanent location is a code, and location may be an authval.
%]
[% IF item.permanent_location %]
[% SET permloc_authval = AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.permanent_location ) %]
[% permloc_authval | html %]
[% IF item.location AND item.location != permloc_authval AND item.location != item.permanent_location %]
([% item.location | html %])
[% SET item_location = AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.location ) %]
[% IF item_location AND item_location != permloc_authval AND item.location != item.permanent_location %]
([% item_location | html %])
[% END %]
[% ELSE %]
[% item.location | html %]
[% item_location | html %]
[% END %]
</span>
</td>
[% IF ( itemdata_ccode ) %]<td>[% item.ccode | html %]</td>[% END %]
[% IF ( itemdata_ccode ) %]<td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => item.ccode ) | html %]</td>[% END %]
[% IF Koha.Preference('EnableItemGroups') %]<td class="item_group">[% item.object.item_group.description | html %]</td>[% END %]
<td class="itemcallnumber">[% IF ( item.itemcallnumber ) %] [% item.itemcallnumber | html %][% END %]</td>
[% IF ( volinfo ) %]
@ -457,62 +458,53 @@ Note that permanent location is a code, and location may be an authval.
[% END %]
<td class="status">
[% IF item.checkout %]
[% IF item.checkout.onsite_checkout %]
[% IF item.object.checkout %]
[% IF item.object.checkout.onsite_checkout %]
<span>Currently in local use
[% ELSE %]
<span class="datedue">Checked out
[% END %]
[% UNLESS ( item.not_same_branch) %]
[% IF item.checkout.onsite_checkout %]
[% IF item.can_be_edited %]
[% IF item.object.checkout.onsite_checkout %]
by
[% ELSE %]
to
[% END %]
[% INCLUDE 'patron-title.inc' patron=item.checkout.patron hide_patron_infos_if_needed=1 %]
[% INCLUDE 'patron-title.inc' patron=item.object.checkout.patron hide_patron_infos_if_needed=1 %]
[% END %]
: due [% item.checkout.date_due | $KohaDates as_due_date => 1 %]
: due [% item.object.checkout.date_due | $KohaDates as_due_date => 1 %]
</span>
[% ELSIF ( item.transfer ) %]
[% IF (item.transfer.datesent) %]
<span class="intransit">In transit from [% Branches.GetName( item.transfer.frombranch ) | html %] to [% Branches.GetName( item.transfer.tobranch ) | html %] since [% item.transfer.datesent | $KohaDates %]</span>
[% ELSIF ( transfer = item.object.get_transfer ) %]
[% IF (transfer.datesent) %]
<span class="intransit">In transit from [% Branches.GetName( transfer.frombranch ) | html %] to [% Branches.GetName( transfer.tobranch ) | html %] since [% transfer.datesent | $KohaDates %]</span>
[% ELSE %]
<span class="transitrequested">Transit pending from [% Branches.GetName( item.transfer.frombranch ) | html %] to [% Branches.GetName( item.transfer.tobranch ) | html %] since [% item.transfer.daterequested | $KohaDates %]</span>
<span class="transitrequested">Transit pending from [% Branches.GetName( transfer.frombranch ) | html %] to [% Branches.GetName( transfer.tobranch ) | html %] since [% item.transfer.daterequested | $KohaDates %]</span>
[% END %]
[% END %]
[% IF ( item.itemlost ) %]
[% SET itemlost_description = AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.itemlost', authorised_value => item.itemlost ) %]
[% IF itemlostloop %]
[% FOREACH itemlostloo IN itemlostloop %]
[% IF itemlostloo.authorised_value == item.itemlost %]
<span class="lost">[% itemlostloo.lib | html %]</span>
[% END %]
[% END %]
<span class="lost">[% itemlost_description | html %]</span>
[% ELSE %]
<span class="lost">Unavailable (lost or missing)</span>
[% END %]
[% END %]
[% IF ( item.withdrawn ) %]
[% IF itemwithdrawnloop %]
[% FOREACH itemwithdrawnloo IN itemwithdrawnloop %]
[% IF itemwithdrawnloo.authorised_value == item.withdrawn %]
<span class="wdn">[% itemwithdrawnloo.lib | html %]</span>
[% END %]
[% END %]
[% SET withdrawn_description = AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.withdrawn', authorised_value => item.withdrawn ) %]
[% IF withdrawn_description %]
<span class="wdn">[% withdrawn_description | html %]</span>
[% ELSE %]
<span class="wdn">Withdrawn</span>
[% END %]
[% END %]
[% IF ( item.damaged ) %]
[% IF itemdamagedloop %]
[% FOREACH itemdamagedloo IN itemdamagedloop %]
[% IF itemdamagedloo.authorised_value == item.damaged %]
<span class="dmg">[% itemdamagedloo.lib | html %]</span>
[% END %]
[% END %]
[% SET damaged_description = AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.damaged', authorised_value => item.damaged ) %]
[% IF damaged_description %]
<span class="dmg">[% damaged_description | html %]</span>
[% ELSE %]
<span class="dmg">Damaged</span>
[% END %]
@ -540,13 +532,15 @@ Note that permanent location is a code, and location may be an authval.
[% END %]
[% END %]
[% SET recall = item.recall %]
[% IF recall %]
[% IF recall.waiting_date %]
<span>Waiting at [% Branches.GetName( recall.pickup_library_id ) | html %] since [% recall.waiting_date | $KohaDates %]</span>
[% ELSE %]
[% patron_link = BLOCK %]<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% recall.patron_id | uri %]">[% recall.patron.firstname | html %] [% recall.patron.surname | html %] ([% recall.patron.cardnumber | html %])</a>[% END %]
<span>recalled by [% patron_link| $raw %] on [% recall.created_date | $KohaDates %]</span>
[% IF Koha.Preference('UseRecalls') %]
[% SET recall = item.object.recall %]
[% IF recall %]
[% IF recall.waiting_date %]
<span>Waiting at [% Branches.GetName( recall.pickup_library_id ) | html %] since [% recall.waiting_date | $KohaDates %]</span>
[% ELSE %]
[% patron_link = BLOCK %]<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% recall.patron_id | uri %]">[% recall.patron.firstname | html %] [% recall.patron.surname | html %] ([% recall.patron.cardnumber | html %])</a>[% END %]
<span>recalled by [% patron_link| $raw %] on [% recall.created_date | $KohaDates %]</span>
[% END %]
[% END %]
[% END %]
@ -583,7 +577,7 @@ Note that permanent location is a code, and location may be an authval.
[% END %]
[% END %]
[% IF ( itemdata_copynumber ) %]
<td class="copynumber">[% item.copynumber | html %]</td>
<td class="copynumber">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.copynumber', authorised_value => item.copynumber ) | html %]</td>
[% END %]
[% IF ( itemdata_stocknumber ) %]
<td class="stocknumber">[% item.stocknumber | html %]</td>
@ -592,7 +586,7 @@ Note that permanent location is a code, and location may be an authval.
<td class="materials"> [% item.materials | html %] </td>
[% END %]
[% IF ( itemdata_itemnotes ) %]
<td><div class="itemnotes">[% item.itemnotes | $raw %]</div></td>
<td><div class="itemnotes">[% item.object.itemnotes.replace('\n','<br />') | $raw %]</div></td>
[% END %]
[% IF itemdata_nonpublicnotes %]
<td class="nonpublicnote">[% item.itemnotes_nonpublic | html %]</td>