@@ -, +, @@ - In the staff interface perform a patron search in the Patrons module which will return multiple pages of results.. - Check checkboxes next to several patrons. - After one checkbox is checked the "Add to patron list" button should be enabled. - After more than one checkbox is checked the "Merge selected patrons" button should be enabled. - A box should appear in the toolbar above the search results, "Patrons selected: X" - Navigate to another page of results. Check more checkboxes. The "Patrons selected" information should be updated. - Return to the first page of results. Your original selections should still be checked. - Test that the correct set of patrons is used when clicking "Merge selected patrons" or when using "Add to patron list." - Click the "Clear" button in the selections information box. Checkboxes should be cleared on every page of results you previously checked. - The "Add to patron list" and "Merge selected patrons" buttons should become disabled. - After making several selections, log out of the staff interface and log back in, returning to the same patron search. Your selections should have been forgotten. --- .../prog/css/src/staff-global.scss | 20 +++ .../prog/en/modules/members/member.tt | 128 +++++++++++++----- .../modules/members/tables/members_results.tt | 2 +- .../intranet-tmpl/prog/js/staff-global.js | 1 + 4 files changed, 115 insertions(+), 36 deletions(-) --- a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss +++ a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss @@ -2211,6 +2211,26 @@ li { } } +#patron_search_selected { + background-color: #F9FEFF; + border: 1px solid #B9D8D9; + border-color: #A2CBCC #CEE0E3 #CEE0E3 #A2CBCC; + border-radius: 3px; + color: #333; + display: inline-block; + font-size: 11px; + line-height: 1.5; + padding: 5px 10px; + text-align: center; + vertical-align: middle; + white-space: nowrap; +} + +#clear-patron-selection { + display: inline-block; + margin-left: 1em; +} + #search-facets { border: 1px solid #B9D8D9; border-radius: 5px 5px 0 0; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/member.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/member.tt @@ -99,6 +99,10 @@ [% IF CAN_user_borrowers_edit_borrowers %] [% END %] + [% END %] @@ -245,14 +249,38 @@ getSearchByLocation( false ); }); + function showPatronSelections( number ){ + $("#patron_search_selected").show().find("span").text(_("Patrons selected: " + number ) ); + } + $(document).ready(function() { $('#merge-patrons').prop('disabled', true); $('#memberresultst').on('change', 'input.selection', function() { - if ( $('.selection:checked').length > 1 ) { + var patron_search_selections = JSON.parse( localStorage.getItem("patron_search_selections") ) || []; + var borrowernumber = $(this).val(); + if( $(this).prop("checked") ){ + patron_search_selections.push( $(this).val() ); + localStorage.setItem('patron_search_selections', JSON.stringify( patron_search_selections )); + showPatronSelections( patron_search_selections.length ); + } else { + var filtered = patron_search_selections.filter(function( value ){ + return value !== borrowernumber; + }); + if( filtered.length > 0 ){ + localStorage.setItem('patron_search_selections', JSON.stringify( filtered )); + patron_search_selections = filtered; + showPatronSelections( filtered.length ); + } else { + patron_search_selections = []; + localStorage.removeItem('patron_search_selections'); + $("#patron_search_selected").hide(); + } + } + if ( patron_search_selections.length > 1 ) { /* More than one checkbox has been checked */ $('#merge-patrons').prop('disabled', false).removeClass("disabled"); $("#patronlist-menu").removeClass("disabled").prop("disabled", false); - } else if ( $('.selection:checked').length == 1 ) { + } else if ( patron_search_selections.length == 1 ) { /* At least one checkbox has been checked */ $('#merge-patrons').prop('disabled', true).addClass("disabled"); $("#patronlist-menu").removeClass("disabled").prop("disabled", false); @@ -264,17 +292,22 @@ }); $('#merge-patrons').on('click', function() { - var merge_patrons_url = 'merge-patrons.pl?' + $('.selection:checked') - .map(function() { - return "id=" + $(this).val() - }).get().join('&'); + var patron_search_selections = JSON.parse( localStorage.getItem("patron_search_selections") ) || []; + var merge_patrons_url = 'merge-patrons.pl?id=' + patron_search_selections.join("&id="); window.location.href = merge_patrons_url; }); - $("#patronlist-dropdown").on("click", ".patron-list-add", function(e){ + $("#clear-patron-selection").on("click", function(e){ e.preventDefault(); + $(".selection").prop("checked", false).change(); + localStorage.removeItem("patron_search_selections"); + $("#patron_search_selected").hide(); + }); - if ( $("#memberresultst input:checkbox:checked").length == 0 ) { + $("#patronlist-dropdown").on("click", ".patron-list-add", function(e){ + e.preventDefault(); + var patron_search_selections = JSON.parse( localStorage.getItem("patron_search_selections") ) || []; + if ( patron_search_selections.length == 0 ) { alert( _("You have not selected any patrons to add to a list!") ); $(".btn-group").removeClass("open"); /* Close button menu */ return false; @@ -496,6 +529,9 @@ stickTo: "#searchresults", stickyClass: "floating" }); + }, + "drawCallback": function(){ + prepSelections(); } }, columns_settings); update_searched(); @@ -505,35 +541,57 @@ }); function patronListAdd(){ - var borrowernumbers = []; - $("#memberresultst").find("input:checkbox:checked").each(function(){ - borrowernumbers.push($(this).val()); - }); - var data = { - add_to_patron_list: $("#add_to_patron_list").val(), - new_patron_list: $("#new_patron_list").val(), - borrowernumbers: borrowernumbers - }; - $.ajax({ - data: data, - type: 'POST', - url: '/cgi-bin/koha/svc/members/add_to_list', - success: function(data) { - $("#patron_list_dialog").show(); - $("#patron_list_dialog > span.patrons-length").html(data.patrons_added_to_list); - $("#patron_list_dialog > a").attr("href", "/cgi-bin/koha/patron_lists/list.pl?patron_list_id=" + data.patron_list.patron_list_id); - $("#patron_list_dialog > a").html(data.patron_list.name); - - if ( $('#add_to_patron_list').val() == 'new' ) { - /* Add a new entry to the menu */ - $("#patronlist-dropdown .divider").before('
  • ' + data.patron_list.name + '
  • '); + var borrowernumbers = JSON.parse( localStorage.getItem("patron_search_selections") ) || []; + if ( borrowernumbers.length > 0 ){ + var data = { + add_to_patron_list: $("#add_to_patron_list").val(), + new_patron_list: $("#new_patron_list").val(), + borrowernumbers: borrowernumbers + }; + $.ajax({ + data: data, + type: 'POST', + url: '/cgi-bin/koha/svc/members/add_to_list', + success: function(data) { + $("#patron_list_dialog").show(); + $("#patron_list_dialog > span.patrons-length").html(data.patrons_added_to_list); + $("#patron_list_dialog > a").attr("href", "/cgi-bin/koha/patron_lists/list.pl?patron_list_id=" + data.patron_list.patron_list_id); + $("#patron_list_dialog > a").html(data.patron_list.name); + + if ( $('#add_to_patron_list').val() == 'new' ) { + /* Add a new entry to the menu */ + $("#patronlist-dropdown .divider").before('
  • ' + data.patron_list.name + '
  • '); + } + }, + error: function() { + alert( _("An error occurred. Patron list could not be updated.") ); } - }, - error: function() { - alert( _("An error occurred. Patron list could not be updated.") ); + }); + return true; + } else { + alert( _("You have not selected any patrons to add to a list!") ); + return false; + } + } + + function prepSelections(){ + var selected_patrons = JSON.parse( localStorage.getItem("patron_search_selections") ); + if( selected_patrons && selected_patrons.length > 0 ){ + showPatronSelections( selected_patrons.length ); + + $('#merge-patrons').prop('disabled', true); + $("input.selection").each(function(){ + var cardnumber = $(this).val(); + if( selected_patrons.indexOf( cardnumber ) >= 0 ){ + $(this).prop("checked", true ); + } + }); + + if( selected_patrons.length > 1 ){ + $('#merge-patrons').removeClass("disabled").prop('disabled', false); + $('#patronlist-menu').removeClass("disabled").prop('disabled', false); } - }); - return true; + } } function getSearchByLocation( setstate ){ --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/tables/members_results.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/tables/members_results.tt @@ -14,7 +14,7 @@ { [% IF CAN_user_borrowers_edit_borrowers || CAN_user_tools_manage_patron_lists %] "dt_borrowernumber": - "", + "", [% END %] "dt_cardnumber": "[% IF ( CAN_user_circulate_circulate_remaining_permissions ) %][% data.cardnumber | html | $To %][% ELSE %][% data.cardnumber | html | $To %][% END %]", --- a/koha-tmpl/intranet-tmpl/prog/js/staff-global.js +++ a/koha-tmpl/intranet-tmpl/prog/js/staff-global.js @@ -206,6 +206,7 @@ function logOut(){ localStorage.removeItem("sql_reports_activetab"); localStorage.removeItem("searches"); localStorage.removeItem("bibs_selected"); + localStorage.removeItem("patron_search_selections"); } function openHelp(){ --