@@ -, +, @@ --- admin/columns_settings.yml | 29 +++++ .../intranet-tmpl/prog/en/includes/circ-menu.inc | 5 + .../prog/en/modules/members/holdshistory.tt | 135 +++++++++++++++++++++ members/holdshistory.pl | 96 +++++++++++++++ 4 files changed, 265 insertions(+) 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,6 +255,35 @@ modules: cannot_be_toggled: 1 cannot_be_modified: 1 + holdshistory: + holdshistory-table: + - + columnname: title + cannot_be_toggled: 1 + cannot_be_modified: 1 + - + columnname: author + - + columnname: barcode + - + columnname: branch + - + columnname: reservedate + - + columnname: notificationdate + - + columnname: reminderdate + - + columnname: expirationdate + - + columnname: waitingdate + - + columnname: cancellationdate + - + columnname: itemtype + - + columnname: status + reports: lostitems: lostitems-table: --- 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; --