@@ -, +, @@ - 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 --- .../prog/en/modules/common/patron_search.tt | 6 +- .../prog/en/modules/suggestion/suggestion.tt | 30 ++++++++-- .../suggestion/tables/suggester_search.tt | 36 ------------ .../intranet-tmpl/prog/js/suggestions.js | 17 ------ suggestion/add_user_search.pl | 7 ++- suggestion/suggester_search.pl | 57 ------------------- suggestion/suggestion.pl | 14 ++++- 7 files changed, 48 insertions(+), 119 deletions(-) delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/tables/suggester_search.tt delete mode 100644 koha-tmpl/intranet-tmpl/prog/js/suggestions.js delete mode 100755 suggestion/suggester_search.pl --- a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt +++ a/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 %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt +++ a/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: [% m.title | html %]. 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 @@ [% INCLUDE 'date-format.inc' %] [% IF ( suggestedby_patron.borrowernumber ) %][% suggestedby_patron.surname | html %], [% suggestedby_patron.firstname | html %] ([% suggestedby_patron.cardnumber | html %]) [% Branches.GetName( suggestedby_patron.branchcode ) | html %] ([% suggestedby_patron.category.description | html %])[% END %] - Set to patron + Set to patron @@ -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 = ''; + suggested += ''; + suggested += borrower.surname + ', ' + borrower.firstname + ' (' + borrower.cardnumber + ')'; + suggested += ' '; + 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(); + }); }); @@ -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' %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/tables/suggester_search.tt +++ a/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": - "Select" - }[% 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 %] --- a/koha-tmpl/intranet-tmpl/prog/js/suggestions.js +++ a/koha-tmpl/intranet-tmpl/prog/js/suggestions.js @@ -1,17 +0,0 @@ -function select_user(borrowernumber, borrower) { - var suggested = ''; - suggested += ''; - suggested += borrower.surname + ', ' + borrower.firstname + ' (' + borrower.cardnumber + ')'; - suggested += ' '; - 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'); - }); - -}); --- a/suggestion/add_user_search.pl +++ a/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, --- a/suggestion/suggester_search.pl +++ a/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 . - -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 ); --- a/suggestion/suggestion.pl +++ a/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 { --