@@ -, +, @@ --- admin/columns_settings.yml | 80 ++++++++---- .../intranet-tmpl/prog/en/includes/circ-menu.inc | 5 + .../prog/en/modules/members/holdshistory.tt | 135 +++++++++++++++++++++ members/holdshistory.pl | 96 +++++++++++++++ 4 files changed, 291 insertions(+), 25 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/members/holdshistory.tt create mode 100644 members/holdshistory.pl --- a/admin/columns_settings.yml +++ a/admin/columns_settings.yml @@ -255,43 +255,34 @@ modules: cannot_be_toggled: 1 cannot_be_modified: 1 - opac: - biblio-detail: - holdingst: - - - columnname: item_itemtype - - - columnname: item_current_location - - - columnname: item_home_location + holdshistory: + holdshistory-table: - - columnname: item_shelving_location - is_hidden: 1 - - - columnname: item_ccode + columnname: title + cannot_be_toggled: 1 + cannot_be_modified: 1 - - columnname: item_callnumber + columnname: author - - columnname: item_enumchron + columnname: barcode - - columnname: item_url + columnname: branch - - columnname: item_copy + columnname: reservedate - - columnname: item_status + columnname: notificationdate - - columnname: item_notes + columnname: reminderdate - - columnname: item_datedue + columnname: expirationdate - - columnname: item_barcode - is_hidden: 1 + columnname: waitingdate - - columnname: item_holds + columnname: cancellationdate - - columnname: item_priority + columnname: itemtype - - columnname: item_coursereserves + columnname: status reports: lostitems: @@ -455,3 +446,42 @@ modules: columnname: locations - columnname: hold_date + + opac: + biblio-detail: + holdingst: + - + columnname: item_itemtype + - + columnname: item_current_location + - + columnname: item_home_location + - + columnname: item_shelving_location + is_hidden: 1 + - + columnname: item_ccode + - + columnname: item_callnumber + - + columnname: item_enumchron + - + columnname: item_url + - + columnname: item_copy + - + columnname: item_status + - + columnname: item_notes + - + columnname: item_datedue + - + columnname: item_barcode + is_hidden: 1 + - + columnname: item_holds + - + columnname: item_priority + - + columnname: item_coursereserves + --- a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc @@ -88,6 +88,11 @@ [% IF ( readingrecordview ) %]
  • [% ELSE %]
  • [% END %]Circulation history
  • [% END %] [% END %] + [% IF ( CAN_user_borrowers ) %] + [% IF ( intranetreadinghistory ) %] + [% IF ( holdshistoryview ) %]
  • [% ELSE %]
  • [% END %]Holds history
  • + [% END %] + [% END %] [% IF ( CAN_user_parameters ) %] [% IF ( logview ) %]
  • [% ELSE %]
  • [% END %]Modification log
  • [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/holdshistory.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/holdshistory.tt @@ -0,0 +1,135 @@ +[% USE KohaDates %] +[% USE Koha %] +[% USE AuthorisedValues %] +[% USE Branches %] +[% USE ColumnsSettings %] +[% INCLUDE 'doc-head-open.inc' %] +Holds history for [% INCLUDE 'patron-title.inc' %] +[% INCLUDE 'doc-head-close.inc' %] + +[% INCLUDE 'datatables.inc' %] +[% INCLUDE 'columns_settings.inc' %] + + + +[% INCLUDE 'header.inc' %] +[% INCLUDE 'patron-search.inc' %] + + + +
    +
    +
    +
    +[% INCLUDE 'members-toolbar.inc' %] +

    Holds history

    + +[% UNLESS Koha.Preference('intranetreadinghistory') %] +
    Staff members are not allowed to access patron's holds history
    +[% ELSIF is_anonymous %] +
    This is the anonymous patron, so no holds history is displayed.
    +[% ELSIF ( !holds ) %] +
    This patron has no holds history.
    +[% ELSE %] + +
    + + + + + + + + + + + + + + + + + [% FOREACH hold IN holds %] + + + + + + + + + + + + + + [% END %] + +
    TitleAuthorBarcodeLibraryReserve dateNotification dateReminder dateExpiration dateWaiting dateCancellation dateItem typeStatus
    [% hold.biblio.title |html %][% hold.biblio.author %][% hold.item.barcode %][% Branches.GetName( hold.branchcode ) %][% hold.reservedate | $KohaDates %] + [% IF hold.notificationdate %] + [% hold.notificationdate | $KohaDates %] + [% ELSE %] + + [% END %] + + [% IF hold.reminderdate %] + [% hold.reminderdate | $KohaDates %] + [% ELSE %] + + [% END %] + + [% IF hold.expirationdate %] + [% hold.expirationdate | $KohaDates %] + [% ELSE %] + + [% END %] + + [% IF hold.waitingdate %] + [% hold.waitingdate | $KohaDates %] + [% ELSE %] + + [% END %] + + [% IF hold.cancellationdate %] + [% hold.cancellationdate | $KohaDates %] + [% ELSE %] + + [% END %] + [% hold.itemtype %] + [% IF hold.found == 'W' %] + Waiting + [% ELSIF hold.found == 'T' %] + In transit + [% ELSIF hold.cancellationdate %] + Cancelled + [% ELSE %] + In queue + [% END %] +
    +
    + +[% END %] +
    +
    + +
    +[% INCLUDE 'circ-menu.inc' %] +
    +
    +[% INCLUDE 'intranet-bottom.inc' %] --- a/members/holdshistory.pl +++ a/members/holdshistory.pl @@ -0,0 +1,96 @@ +#!/usr/bin/perl +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use CGI qw ( -utf8 ); + +use C4::Auth; +use C4::Output; + +use Koha::Patrons; + +my $input = CGI->new; + +my $borrowernumber; +my $cardnumber; +my @all_holds; + +my ($template, $loggedinuser, $cookie)= get_template_and_user({template_name => "members/holdshistory.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {borrowers => 1}, + debug => 1, + }); + +my $patron; + +if ($input->param('cardnumber')) { + $cardnumber = $input->param('cardnumber'); + $patron = Koha::Patrons->find( { cardnumber => $cardnumber } ); +} +if ($input->param('borrowernumber')) { + $borrowernumber = $input->param('borrowernumber'); + $patron = Koha::Patrons->find( $borrowernumber ); +} + +unless ( $patron ) { + print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); + exit; +} + +my $holds; +my $old_holds; + +if ( $borrowernumber eq C4::Context->preference('AnonymousPatron') ){ + # use of 'eq' in the above comparison is intentional -- the + # system preference value could be blank + $template->param( is_anonymous => 1 ); +} else { + $holds = $patron->holds; + $old_holds = $patron->old_holds; + + while (my $hold = $holds->next) { + push @all_holds, $hold; + } + + while (my $hold = $old_holds->next) { + push @all_holds, $hold; + } +} + +if ( $patron->category->category_type eq 'C') { + my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); + $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; + $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; +} + +$template->param( adultborrower => 1 ) if ( $patron->category->category_type eq 'A' || $patron->category->category_type eq 'I' ); + +$template->param( picture => 1 ) if $patron->image; + +$template->param(%{ $patron->unblessed }); + +$template->param( + holdshistoryview => 1, + borrowernumber => $borrowernumber, + patron => $patron, + holds => \@all_holds, +); + +output_html_with_http_headers $input, $cookie, $template->output; --