@@ -, +, @@ Serial recipients --- admin/add_user_search.pl | 2 +- .../prog/en/modules/common/patron_search.tt | 27 ++- .../prog/en/modules/serials/member-search.tt | 83 --------- .../prog/en/modules/serials/routing.tt | 78 +++++---- .../en/modules/serials/tables/members_results.tt | 20 +++ serials/add_user_search.pl | 51 ++++++ serials/member-search.pl | 178 -------------------- 7 files changed, 136 insertions(+), 303 deletions(-) delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/serials/member-search.tt create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/serials/tables/members_results.tt create mode 100755 serials/add_user_search.pl delete mode 100755 serials/member-search.pl --- a/admin/add_user_search.pl +++ a/admin/add_user_search.pl @@ -43,7 +43,7 @@ my $selection_type = $input->param('selection_type') || 'add'; my $referer = $input->referer(); -# If this script is called by acqui/basket.pl +# If this script is called by admin/aqbudgets.pl # the patrons to return should be superlibrarian or have the order_manage # acquisition flag. my $search_patrons_with_acq_perm_only = --- a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt @@ -114,18 +114,27 @@ function filter() { // modify parent window owner element [% IF selection_type == 'add' %] - [%# Note that add_user could sent data instead of borrowername too %] function add_user(borrowernumber, borrowername) { var p = window.opener; - $("#info").hide(); - $("#error").hide(); - if ( p.add_user(borrowernumber, borrowername) < 0 ) { - $("#error").html(_("Borrower '%s' is already in the list.").format(borrowername)); - $("#error").show(); - } else { - $("#info").html(_("Borrower '%s' added.").format(borrowername)); - $("#info").show(); + // In one place (serials/routing.tt), the page is reload on every add + // We have to wait for the page to be there + function wait_for_opener () { + if ( ! $(opener.document).find('body').size() ) { + setTimeout(wait_for_opener, 500); + } else { + [%# Note that add_user could sent data instead of borrowername too %] + $("#info").hide(); + $("#error").hide(); + if ( p.add_user(borrowernumber, borrowername) < 0 ) { + $("#error").html(_("Borrower '%s' is already in the list.").format(borrowername)); + $("#error").show(); + } else { + $("#info").html(_("Borrower '%s' added.").format(borrowername)); + $("#info").show(); + } + } } + wait_for_opener(); } [% ELSIF selection_type == 'select' %] function select_user(borrowernumber, data) { --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/member-search.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/member-search.tt @@ -1,83 +0,0 @@ -[% INCLUDE 'doc-head-open.inc' %] -Koha › Member Search › [% bookselname %] -[% INCLUDE 'doc-head-close.inc' %] - - - - -
- -
-
- -[% IF ( resultsloop ) %] -

Results [% from %] to [% to %] of [% numresults %] found for [% IF ( member ) %]'[% member %]'[% END %][% IF ( surname ) %]'[% surname %]'[% END %]

-
- - - - - - - - - - - - [% FOREACH resultsloo IN resultsloop %] - [% IF ( loop.odd ) %][% ELSE %][% END %] - - - - - [% END %] - -
CardNameLibraryAdd
[% resultsloo.cardnumber %] [% resultsloo.surname %], [% resultsloo.firstname %] [% resultsloo.branchcode %] Add
-[% IF ( multipage ) %]
[% paginationbar %]
[% END %] -
-[% ELSE %] -[% IF ( searching ) %] -

No results found

-[% END %] -[% END %] -
Close
-
- -
- -[% INCLUDE 'intranet-bottom.inc' %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/routing.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/routing.tt @@ -9,9 +9,18 @@ function reorder_item(sid,rid,rank){ window.location.href=mylocation; } -function search_member(subscriptionid){ - var myurl = 'member-search.pl?subscriptionid='+subscriptionid; window.open(myurl,'FindAMember','width=550,height=480,toolbar=no,scrollbars=yes'); -} + function userPopup() { + window.open("/cgi-bin/koha/serials/add_user_search.pl", + 'PatronPopup', + 'width=740,height=450,location=yes,toolbar=no,' + + 'scrollbars=yes,resize=yes' + ); + } + + function add_user(borrowernumber) { + var myurl = "routing.pl?subscriptionid="+[% subscriptionid %]+"&borrowernumber="+borrowernumber+"&op=add"; + window.location.href = myurl; + } //--> @@ -47,37 +56,42 @@ function search_member(subscriptionid){ [% END %] [% issue %] -[% IF memberloop %] -
  • Recipients: - - - - - [% USE m_loop = iterator(memberloop) %] - [% FOREACH member IN m_loop %] - -
    NameRankDelete
    [% member.name %] - + + + + + [% USE m_loop = iterator(memberloop) %] + [% FOREACH member IN m_loop %] + + - - + + + + + [% END %] +
    NameRankDelete
    [% member.name %] + - Delete
    Delete
    + [% END %] + +

    + + [% IF memberloop %] + Delete all [% END %] -

    Add recipients   Delete all

  • -[% ELSE %] -
  • Recipients: - Add recipients
  • -[% END %] +

    +
  • --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/tables/members_results.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/tables/members_results.tt @@ -0,0 +1,20 @@ +[% 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_branch": + "[% data.branchname |html %]", + "dt_action": + "Add" + }[% UNLESS loop.last %],[% END %] + [% END %] + ] +} --- a/serials/add_user_search.pl +++ a/serials/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', 'branch', 'action'], + json_template => 'serials/tables/members_results.tt', + selection_type => 'add', +); +output_html_with_http_headers( $input, $cookie, $template->output ); --- a/serials/member-search.pl +++ a/serials/member-search.pl @@ -1,178 +0,0 @@ -#!/usr/bin/perl - -# Parts copyright Catalyst IT 2010 -# -# 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. - -=head1 member-search.pl - -Member Search.pl script used to search for members to add to a routing list - -=cut - -use strict; -use warnings; -use CGI qw ( -utf8 ); -use C4::Auth; # get_template_and_user -use C4::Output; -use C4::Members; # BornameSearch -use C4::Branch; -use C4::Category; -use File::Basename; - -my $cgi = new CGI; -my $theme = $cgi->param('theme') || "default"; -my $resultsperpage = $cgi->param('resultsperpage')||C4::Context->preference("PatronsPerPage")||20; -my $startfrom = $cgi->param('startfrom')||1; - -my $patron = $cgi->Vars; -foreach (keys %$patron){ - delete $$patron{$_} unless($$patron{$_}); -} - -my @categories=C4::Category->all; -my $branches=(defined $$patron{branchcode}?GetBranchesLoop($$patron{branchcode}):GetBranchesLoop()); -my $subscriptionid = $cgi->param('subscriptionid'); -my $searchstring = $cgi->param('member'); - -my %categories_dislay; -my ($template, $loggedinuser, $cookie); - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "serials/member-search.tt", - query => $cgi, - type => "intranet", - authnotrequired => 0, - flagsrequired => { serials => 'routing' }, - }); - -foreach my $category (@categories){ - my $hash={ - category_description=>$$category{description}, - category_type=>$$category{category_type} - }; - $categories_dislay{$$category{categorycode}} = $hash; -} -$template->param( - "AddPatronLists_".C4::Context->preference("AddPatronLists")=> "1", - ); -if (C4::Context->preference("AddPatronLists")=~/code/){ - $categories[0]->{'first'}=1; -} - -my $member=$cgi->param('member'); -my $orderby=$cgi->param('orderby'); -$orderby = "surname,firstname" unless $orderby; -if (defined $member) { - $member =~ s/,//g; #remove any commas from search string - $member =~ s/\*/%/g; -} - -my ($count,$results); - -if ( C4::Context->preference("IndependentBranches") ) { - if ( C4::Context->userenv - && !C4::Context->IsSuperLibrarian() - && C4::Context->userenv->{'branch'} ) - { - $$patron{branchcode} = C4::Context->userenv->{'branch'}; - } -} -$$patron{firstname}.="\%" if ($$patron{firstname}); -$$patron{surname}.="\%" if ($$patron{surname}); - -my @searchpatron; -push @searchpatron, $member if ($member); -push @searchpatron, $patron if ( keys %$patron ); -my $from = ( $startfrom - 1 ) * $resultsperpage; -my $to = $from + $resultsperpage; -if (@searchpatron) { - ($results) = Search( - \@searchpatron, - [ { surname => 0 }, { firstname => 0 } ], - undef, - undef, - [ "firstname", "surname", "email", "othernames", "cardnumber" ], - "start_with" - ); -} -if ($results) { - $count = scalar(@$results); -} -my @resultsdata; -$to=($count>$to?$to:$count); -my $index=$from; -foreach my $borrower(@$results[$from..$to-1]){ - # find out stats - $borrower->{'dateexpiry'}= C4::Dates->new($borrower->{'dateexpiry'},'iso')->output('syspref'); - if ($categories_dislay{$borrower->{'categorycode'}}){ - my %row = ( - count => $index++, - %$borrower, - %{$categories_dislay{$$borrower{categorycode}}}, - ); - push(@resultsdata, \%row); - } - else { - warn $borrower->{'cardnumber'} ." has a bad category code of " . $borrower->{'categorycode'} ."\n"; - } -} -if ($$patron{branchcode}){ - foreach my $branch (grep{$_->{value} eq $$patron{branchcode}}@$branches){ - $$branch{selected}=1; - } -} -if ($$patron{categorycode}){ - foreach my $category (grep{$_->{categorycode} eq $$patron{categorycode}}@categories){ - $$category{selected}=1; - } -} -my %parameters= -( %{$patron}, - 'orderby' => $orderby, - 'resultsperpage' => $resultsperpage, - 'type'=> 'intranet'); -my $base_url = - 'member-search.pl?&' - . join( - '&', - map { "$_=$parameters{$_}" } (keys %parameters) - ); - -$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+1 || $startfrom!=1), -); -$template->param( - branchloop=>$branches, - categoryloop=>\@categories, -); - - -$template->param( - searching => "1", - actionname => basename($0), - %$patron, - numresults => $count, - resultsloop => \@resultsdata, - ); - -output_html_with_http_headers $cgi, $cookie, $template->output; --