From 0fa329635e74d0865d184030074f64af9eda49e8 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 20 Mar 2015 17:48:43 +0100 Subject: [PATCH] Bug 13891: DataTables server-side processing - patron cards This third patch removes the previous way to search for patron cards users. Test plan: 1/ Add items to a patron card batch (patroncards/edit-batch.pl?op=edit&element_id=X) 2/ Add 1+ patrons to the batch 3/ Confirm there is no regression --- .../prog/en/modules/common/patron_search.tt | 2 + .../prog/en/modules/patroncards/edit-batch.tt | 15 ++- .../prog/en/modules/patroncards/members-search.tt | 126 ------------------ .../modules/patroncards/tables/members_results.tt | 26 ++++ patroncards/add_user_search.pl | 51 +++++++ patroncards/members-search.pl | 147 --------------------- 6 files changed, 92 insertions(+), 275 deletions(-) delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt create mode 100755 patroncards/add_user_search.pl delete mode 100755 patroncards/members-search.pl diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt index b1e4c47..e182688 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt @@ -176,6 +176,8 @@ function filter() { [% CASE 'name' %]Name [% CASE 'branch' %]Library [% CASE 'category' %]Category + [% CASE 'dateexpiry' %]Expires on + [% CASE 'borrowernotes' %]Notes [% CASE 'action' %]  [% END %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt index 0851936..25f79d4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt @@ -46,9 +46,20 @@ return; // abort delete } }; + function Add() { - window.open("/cgi-bin/koha/patroncards/members-search.pl?batch_id=[% batch_id %]",'FindABibIndex','width=875,height=400,toolbar=no,scrollbars=yes'); - }; + window.open("/cgi-bin/koha/patroncards/add_user_search.pl", + 'PatronPopup', + 'width=740,height=450,location=yes,toolbar=no,' + + 'scrollbars=yes,resize=yes' + ); + } + + function add_user(borrowernumber) { + var myurl = "edit-batch.pl?op=add&batch_id=[% batch_id %]&borrower_number="+borrowernumber; + window.location.href = myurl; + } + function DeDuplicate() { window.location = "/cgi-bin/koha/patroncards/edit-batch.pl?op=de_duplicate&batch_id=[% batch_id %]"; }; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt deleted file mode 100644 index b0e7702..0000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt +++ /dev/null @@ -1,126 +0,0 @@ -[% INCLUDE 'doc-head-open.inc' %] -Koha › Patrons [% IF ( searching ) %]› Search results[% END %] -[% INCLUDE 'doc-head-close.inc' %] - - - - - - -
-
-
-

Patron search

- -
- Browse by last name: - [% FOREACH letter IN alphabet.split(' ') %] - [% letter %] - [% END %] -
- -

- - - - - -[% UNLESS ( no_categories ) %] - - -[% END %] - -

-
- -[% IF ( resultsloop ) %] -

Results [% from %] to [% to %] of [% numresults %] found [% IF ( member ) %]for name: '[% member %]'[% END %] [% IF ( category ) %]with category code: '[% category %]'[% END %]

-[% IF ( paginationbar ) %]
[% paginationbar %]
[% END %] -
- -
- - - - - - - - - - - - - [% FOREACH resultsloo IN resultsloop %] - [% UNLESS ( loop.odd ) %] - - [% ELSE %] - - [% END %] - - - - - - - - - - [% END %] -
SelectCardNameCategoryLibraryExpires onNotes
[% resultsloo.cardnumber %][% resultsloo.surname %], [% resultsloo.firstname %]
[% resultsloo.address %][% IF ( resultsloo.address2 ) %]
[% resultsloo.address2 %][% END %][% IF ( resultsloo.city ) %]
[% resultsloo.city %][% END %]
[% resultsloo.category_description %] ([% resultsloo.categorycode %])[% resultsloo.branchcode %][% resultsloo.dateexpiry %][% resultsloo.borrowernotes %]Add
-
-
- -[% ELSE %] -[% IF ( searching ) %] -No results found -[% END %] -[% END %] - -
-
-[% INCLUDE 'popup-bottom.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt new file mode 100644 index 0000000..39f6ece --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt @@ -0,0 +1,26 @@ +[% USE To %] +{ + "sEcho": [% sEcho %], + "iTotalRecords": [% iTotalRecords %], + "iTotalDisplayRecords": [% iTotalDisplayRecords %], + "aaData": [ + [% FOREACH data IN aaData %] + { + "dt_cardnumber": + "[% data.cardnumber %]", + "dt_name": + "[% INCLUDE 'patron-title.inc' borrowernumber = data.borrowernumber category_type = data.category_type firstname = data.firstname surname = data.surname othernames = data.othernames cardnumber = data.cardnumber invert_name = 1%]", + "dt_category": + "[% data.category_description |html %] ([% data.category_type |html %])", + "dt_branch": + "[% data.branchname |html %]", + "dt_dateexpiry": + "[% data.dateexpiry %]", + "dt_borrowernotes": + "[% data.borrowernotes.replace('\\\\' , '\\\\') |html |html_line_break |collapse %]", + "dt_action": + "Add" + }[% UNLESS loop.last %],[% END %] + [% END %] + ] +} diff --git a/patroncards/add_user_search.pl b/patroncards/add_user_search.pl new file mode 100755 index 0000000..2953dcf --- /dev/null +++ b/patroncards/add_user_search.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl + +# This file is part of Koha. +# +# Copyright 2014 BibLibre +# +# 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 C4::Members; + +my $input = new CGI; + +my $dbh = C4::Context->dbh; + +my ( $template, $loggedinuser, $cookie, $staff_flags ) = get_template_and_user( + { template_name => "common/patron_search.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { serials => 'routing' }, + } +); + +my $q = $input->param('q') || ''; +my $op = $input->param('op') || ''; + +my $referer = $input->referer(); + +$template->param( + view => ( $input->request_method() eq "GET" ) ? "show_form" : "show_results", + columns => ['cardnumber', 'name', 'category', 'branch', 'dateexpiry', 'borrowernotes', 'action'], + json_template => 'patroncards/tables/members_results.tt', + selection_type => 'add', +); +output_html_with_http_headers( $input, $cookie, $template->output ); diff --git a/patroncards/members-search.pl b/patroncards/members-search.pl deleted file mode 100755 index 0c680a0..0000000 --- a/patroncards/members-search.pl +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/perl - -# Copyright 2000-2002 Katipo Communications -# -# 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 2 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, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -use strict; -use warnings; - -use CGI qw ( -utf8 ); - -use C4::Auth; -use C4::Output; -use C4::Members; -use C4::Debug; - -my $cgi = CGI->new; - -my $batch_id = $cgi->param('batch_id') || 0; -my $startfrom = $cgi->param('startfrom')||1; -my $resultsperpage = $cgi->param('resultsperpage')||C4::Context->preference("PatronsPerPage")||20; -my $category = $cgi->param('category') || undef; -my $member = $cgi->param('member') || ''; -my $orderby = $cgi->param('orderby') || undef; -my $not_attributes = $cgi->param('not_attributes') || undef; - -my @categories=C4::Category->all; -my %categories_display; -my $no_categories; - -foreach my $category (@categories) { - my $hash={ - category_description=>$$category{description}, - category_type=>$$category{category_type} - }; - $categories_display{$$category{categorycode}} = $hash; -} - - -my ($template, $loggedinuser, $cookie) = get_template_and_user({ - template_name => "patroncards/members-search.tt", - query => $cgi, - type => "intranet", - authnotrequired => 0, - flagsrequired => {borrowers => 1}, - debug => 1,}); - -if(scalar(@categories) < 1){ $no_categories = 1; } -if($no_categories && C4::Context->preference("AddPatronLists")=~/code/){ - $template->param(no_categories => 1); -} else { - $template->param( - categories=>\@categories, - category => $category - ); -} - -$orderby = "surname,firstname" unless $orderby; -$member =~ s/,//g; #remove any commas from search string -$member =~ s/\*/%/g; - -if ($member || $category) { - my $results = $category ? Search({''=>$member, categorycode=>$category}, $orderby, undef, undef, undef, undef, $not_attributes ) - : Search($member, $orderby, undef, undef, undef, undef, $not_attributes); - my $count = $results ? @$results : 0; - - my @resultsdata = (); - my $to = ($count>($startfrom * $resultsperpage)?$startfrom * $resultsperpage:$count); - for (my $i = ($startfrom-1) * $resultsperpage; $i < $to; $i++){ - #find out stats - my ($od,$issue,$fines) = GetMemberIssuesAndFines($results->[$i]{'borrowernumber'}); - my %row = ( - count => $i + 1, - %{$categories_display{$results->[$i]{categorycode}}}, - borrowernumber => $results->[$i]{'borrowernumber'}, - cardnumber => $results->[$i]{'cardnumber'}, - surname => $results->[$i]{'surname'}, - firstname => $results->[$i]{'firstname'}, - categorycode => $results->[$i]{'categorycode'}, - address => $results->[$i]{'address'}, - address2 => $results->[$i]{'address2'}, - city => $results->[$i]{'city'}, - zipcode => $results->[$i]{'zipcode'}, - country => $results->[$i]{'country'}, - branchcode => $results->[$i]{'branchcode'}, - overdues => $od, - issues => $issue, - odissue => "$od/$issue", - fines => ($fines ? sprintf("%.2f",$fines) : ''), - borrowernotes => $results->[$i]{'borrowernotes'}, - sort1 => $results->[$i]{'sort1'}, - sort2 => $results->[$i]{'sort2'}, - dateexpiry => C4::Dates->new($results->[$i]{'dateexpiry'},'iso')->output('syspref'), - ); - push(@resultsdata, \%row); - } - my $base_url = '?' . join('&', map { $_->{term} . '=' . $_->{val} } ( - { term => 'member', val => $member }, - { term => 'category', val => $category }, - { term => 'orderby', val => $orderby }, - { term => 'resultsperpage', val => $resultsperpage }, - { term => 'batch_id', val => $batch_id },) - ); - $template->param( - paginationbar => pagination_bar( - $base_url, int( $count / $resultsperpage ) + 1, - $startfrom, 'startfrom' - ), - startfrom => $startfrom, - from => ($startfrom-1) * $resultsperpage + 1, - to => $to, - multipage => ($count != $to || $startfrom != 1), - searching => "1", - member => $member, - category_type => $category, - numresults => $count, - resultsloop => \@resultsdata, - batch_id => $batch_id, - ); -} -else { - $template->param( batch_id => $batch_id); -} - -$template->param( 'alphabet' => C4::Context->preference('alphabet') || join ' ', 'A' .. 'Z' ); - -output_html_with_http_headers $cgi, $cookie, $template->output; - -__END__ - -#script to do a borrower enquiry/bring up borrower details etc -#written 20/12/99 by chris@katipo.co.nz - - -- 2.1.0