Browse Source

Bug 26738: (bug 24819 follow-up) Fix manager selection

Bug 23590 added a new feature to select the manager of a suggestion.
One month later bug 24819 added the ability to pick the suggester.

This second patchset broke the manager selection.

This patch simplifies the way the suggester is selected, using the
generic way and mimicking what is done for the manager.

Test plan:
- create a new purchase suggestion from within acquisitions (suggestion.pl?op=add)
- click "select manager," search for user, click Select
- see that the user you just selected shows under "Created by,"
- see that "Managed by" still says "You"
- modify the suggester
- save your suggestion
=> Everything is saved correctly

QA will test the permission alert:
Edit suggestion.tt and remove "&permissions=suggestions.suggestions_manage"
Edit the suggestion, select a manager, pick a patron in the list who
does not have sufficient permissions, save
=> you get the alert

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
20.11.x
Jonathan Druart 12 months ago
parent
commit
cd742a15dd
  1. 6
      koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt
  2. 30
      koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt
  3. 36
      koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/tables/suggester_search.tt
  4. 17
      koha-tmpl/intranet-tmpl/prog/js/suggestions.js
  5. 7
      suggestion/add_user_search.pl
  6. 57
      suggestion/suggester_search.pl
  7. 14
      suggestion/suggestion.pl

6
koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt

@ -285,7 +285,11 @@
[% ELSIF selection_type == 'select' %]
function select_user(borrowernumber, data) {
var p = window.opener;
p.select_user(borrowernumber, data);
[% IF callback %]
p.[% callback %](borrowernumber, data);
[% ELSE %]
p.select_user(borrowernumber, data);
[% END %]
window.close();
}
[% END %]

30
koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt

@ -264,6 +264,8 @@
[% SWITCH m.code %]
[% CASE 'biblio_exists' %]
A similar document already exists: <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% m.id | uri %]">[% m.title | html %]</a>. Click on "Confirm your suggestion" to ignore this message.
[% CASE 'manager_not_enough_permissions' %]
The manager you selected does not have sufficient permissions.
[% CASE %]
[% m.code | html %]
[% END %]
@ -390,7 +392,7 @@
<td><input type="text" id="suggesteddate" name="suggesteddate" class="datepicker" size="10" maxlength="10" value="[% suggesteddate | $KohaDates %]"/>[% INCLUDE 'date-format.inc' %]</td>
<td id="tdsuggestedby"><input type="hidden" id="suggestedby" name="suggestedby" value="[% suggestedby | html %]"/>[% IF ( suggestedby_patron.borrowernumber ) %]<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% suggestedby_patron.borrowernumber | uri %]">[% suggestedby_patron.surname | html %], [% suggestedby_patron.firstname | html %] ([% suggestedby_patron.cardnumber | html %])</a> [% Branches.GetName( suggestedby_patron.branchcode ) | html %] ([% suggestedby_patron.category.description | html %])[% END %]
</td>
<td><a href="#" id="suggester_search" class="btn btn-default">Set to patron</a></td>
<td><a href="#" id="edit_suggester" class="btn btn-default">Set to patron</a></td>
</tr>
<tr>
<th><label for="accepteddate">Accepted on:</label> </th>
@ -962,13 +964,13 @@
var tab = '';
function editManagerPopup(selected_tab) {
tab = selected_tab;
window.open("/cgi-bin/koha/suggestion/add_user_search.pl?selection_type=select",
window.open("/cgi-bin/koha/suggestion/add_user_search.pl?selection_type=select&callback=select_manager&permissions=suggestions.suggestions_manage",
'PatronPopup',
'width=740,height=450,location=yes,toolbar=no,'
+ 'scrollbars=yes,resize=yes'
);
}
function select_user(borrowernumber, borrower) {
function select_manager(borrowernumber, borrower) {
var managedby_name = $("#managedby_name"+tab);
var managedby = $("#managedby"+tab);
managedby_name.empty();
@ -998,6 +1000,23 @@
[% END %]
}
function editSuggesterPopup() {
window.open("/cgi-bin/koha/suggestion/add_user_search.pl?selection_type=select&callback=select_suggester",
'PatronPopup',
'width=740,height=450,location=yes,toolbar=no,'
+ 'scrollbars=yes,resize=yes'
);
}
function select_suggester(borrowernumber, borrower) {
var suggested = '<input type="hidden" id="suggestedby" name="suggestedby" value="' + borrowernumber + '" />';
suggested += '<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=' + borrowernumber + '">';
suggested += borrower.surname + ', ' + borrower.firstname + ' (' + borrower.cardnumber + ')';
suggested += '</a> ';
suggested += borrower.branchname + ' (' + borrower.category_description + ')';
$("#tdsuggestedby").html(suggested);
return 0;
}
$(document).ready(function(){
$("#edit_manager").on("click",function(e){
e.preventDefault();
@ -1009,6 +1028,10 @@
editManagerPopup(selected_tab);
});
$("#edit_suggester").on("click", function(e){
e.preventDefault();
editSuggesterPopup();
});
});
</script>
@ -1216,6 +1239,5 @@
[% END %]
[% Asset.js("js/acq.js") | $raw %]
[% Asset.js("js/acquisitions-menu.js") | $raw %]
[% Asset.js("js/suggestions.js") | $raw %]
[% END %]
[% INCLUDE 'intranet-bottom.inc' %]

36
koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/tables/suggester_search.tt

@ -1,36 +0,0 @@
[% USE raw %]
[% USE To %]
[% USE Branches %]
[% USE KohaDates %]
{
"sEcho": [% sEcho | html %],
"iTotalRecords": [% iTotalRecords | html %],
"iTotalDisplayRecords": [% iTotalDisplayRecords | html %],
"aaData": [
[% FOREACH data IN aaData %]
{
"dt_cardnumber":
"[% data.cardnumber | html %]",
"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_dateofbirth":
"[% data.dateofbirth | $KohaDates %]",
"dt_address":
"[% INCLUDE escape_address data=data %]",
"dt_action":
"<a href=\"#\" class=\"btn btn-default btn-xs select_user\" data-borrowernumber=\"[% data.borrowernumber | html %]\">Select</a><input type=\"hidden\" id=\"borrower_data[% data.borrowernumber | html %]\" name=\"borrower_data[% data.borrowernumber | html %]\" value=\"[% To.json(data) | html %]\" />"
}[% UNLESS loop.last %],[% END %]
[% END %]
]
}
[% BLOCK escape_address %]
[%~ SET address = data.streetnumber _ ' ' %]
[%~ IF data.address %][% SET address = address _ data.address _ ' ' %][% END %]
[%~ IF data.address2 %][% SET address = address _ data.address2 _ ' ' %][% END %]
[%~ IF data.city %][% SET address = address _ data.city _ ' ' %][% END %]
[%~ IF data.state %][% SET address = address _ data.state _ ' ' %][% END %]
[%~ IF data.zipcode %][% SET address = address _ data.zipcode _ ' ' %][% END %]
[%~ IF data.country %][% SET address = address _ data.country _ ' ' %][% END %]
[%~ SET address = address _ Branches.GetName( data.branchcode ) %]
[%~ To.json( address ) | $raw ~%]
[% END %]

17
koha-tmpl/intranet-tmpl/prog/js/suggestions.js

@ -1,17 +0,0 @@
function select_user(borrowernumber, borrower) {
var suggested = '<input type="hidden" id="suggestedby" name="suggestedby" value="' + borrowernumber + '" />';
suggested += '<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=' + borrowernumber + '">';
suggested += borrower.surname + ', ' + borrower.firstname + ' (' + borrower.cardnumber + ')';
suggested += '</a> ';
suggested += borrower.branchname + ' (' + borrower.category_description + ')';
$("#tdsuggestedby").html(suggested);
return 0;
}
$(document).ready(function(){
$('body').on('click', '#suggester_search', function(e) {
e.preventDefault();
var newin = window.open('suggester_search.pl','popup','width=600,height=400,resizable=no,toolbar=false,scrollbars=yes,top');
});
});

7
suggestion/add_user_search.pl

@ -43,16 +43,17 @@ my $selection_type = $input->param('selection_type') || 'add';
my $referer = $input->referer();
# If this script is called by suggestion/suggestion.pl
# the patrons to return should be superlibrarian or have the suggestions_manage flag
# The patrons to return should be superlibrarian or have the suggestions_manage flag
my $permissions = $input->param('permissions');
my $search_patrons_with_suggestion_perm_only =
( $referer =~ m|suggestion/suggestion.pl| )
( $permissions && $permissions eq 'suggestions.suggestions_manage' )
? 1 : 0;
my $patron_categories = Koha::Patron::Categories->search_limited;
$template->param(
patrons_with_suggestion_perm_only => $search_patrons_with_suggestion_perm_only,
view => ( $input->request_method() eq "GET" ) ? "show_form" : "show_results",
callback => scalar $input->param('callback'),
columns => ['cardnumber', 'name', 'branch', 'category', 'action'],
json_template => 'acqui/tables/members_results.tt',
selection_type => $selection_type,

57
suggestion/suggester_search.pl

@ -1,57 +0,0 @@
#!/usr/bin/perl
# This file is part of Koha.
#
# Copyright 2020 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 <http://www.gnu.org/licenses>.
use Modern::Perl;
use CGI qw ( -utf8 );
use C4::Auth;
use C4::Output;
use C4::Members;
use Koha::Patron::Categories;
my $input = CGI->new;
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 => { suggestions => 'suggestions_manage' },
}
);
my $q = $input->param('q') || '';
my $op = $input->param('op') || '';
my $referer = $input->referer();
my $patron_categories = Koha::Patron::Categories->search_limited;
$template->param(
view => ( $input->request_method() eq "GET" ) ? "show_form" : "show_results",
columns => ['cardnumber', 'name', 'dateofbirth', 'address', 'action' ],
json_template => 'suggestion/tables/suggester_search.tt',
selection_type => 'select',
alphabet => ( C4::Context->preference('alphabet') || join ' ', 'A' .. 'Z' ),
categories => $patron_categories,
aaSorting => 1,
);
output_html_with_http_headers( $input, $cookie, $template->output );

14
suggestion/suggestion.pl

@ -135,13 +135,25 @@ if ( $op =~ /save/i ) {
itemtype => $suggestion_only->{itemtype},
});
if ( !$suggestion_only->{suggestionid} && ( my ($duplicatebiblionumber, $duplicatetitle) = FindDuplicate($biblio) ) && !$save_confirmed ) {
my $manager = Koha::Patrons->find( $suggestion_only->{managedby} );
if ( $manager && not $manager->has_permission({suggestions => 'suggestions_manage'})) {
push @messages, { type => 'error', code => 'manager_not_enough_permissions' };
$template->param(
messages => \@messages,
);
delete $suggestion_ref->{suggesteddate};
delete $suggestion_ref->{manageddate};
delete $suggestion_ref->{managedby};
Init($suggestion_ref);
}
elsif ( !$suggestion_only->{suggestionid} && ( my ($duplicatebiblionumber, $duplicatetitle) = FindDuplicate($biblio) ) && !$save_confirmed ) {
push @messages, { type => 'error', code => 'biblio_exists', id => $duplicatebiblionumber, title => $duplicatetitle };
$template->param(
messages => \@messages,
need_confirm => 1
);
delete $suggestion_ref->{suggesteddate};
delete $suggestion_ref->{manageddate};
Init($suggestion_ref);
}
else {

Loading…
Cancel
Save