Bugzilla – Attachment 98095 Details for
Bug 23594
Add ability to batch modify itemtypes from the suggestions page
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 23594: Batch modification for itemtypes on suggestions page
Bug-23594-Batch-modification-for-itemtypes-on-sugg.patch (text/plain), 20.11 KB, created by
Katrin Fischer
on 2020-01-29 22:02:20 UTC
(
hide
)
Description:
Bug 23594: Batch modification for itemtypes on suggestions page
Filename:
MIME Type:
Creator:
Katrin Fischer
Created:
2020-01-29 22:02:20 UTC
Size:
20.11 KB
patch
obsolete
>From a0f1014b17cc679dea65432f22dacb6d72c76a66 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Mon, 21 Oct 2019 18:06:07 +0200 >Subject: [PATCH] Bug 23594: Batch modification for itemtypes on suggestions > page >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >This new enhancement adds the ability to update the item types for >selected suggestions on the suggestions management page >(suggestion/suggestion.pl) > >To achieve this goal we needed to refresh a bit the template, in order >to get rid of weird code. To not recreate the previous coding awkwardness >some code has been rewritten (mainly the removal of suggestiontype) > >Test plan: >- Create some suggestions >- On the suggestions management page, select some of them and a new item >types. >- Submit the form and confirm that the itemtype of the suggestions has >been updated > >- Also you should confirm that the "delete" and "change status" still >work as before > >Sponsored-by: BULAC - http://www.bulac.fr/ > >Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr> > >Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> >--- > .../prog/en/modules/suggestion/suggestion.tt | 226 +++++++++++---------- > suggestion/suggestion.pl | 17 +- > 2 files changed, 126 insertions(+), 117 deletions(-) > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt >index 38d74c8ad3..075b7c62a9 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt >@@ -56,7 +56,7 @@ > > <div id="toolbar" class="btn-toolbar"> > <a class="btn btn-default" id="editsuggestion" href="suggestion.pl?op=edit&suggestionid=[% suggestionid | html %]"><i class="fa fa-pencil"></i> Edit</a> >- <a class="btn btn-default deletesuggestion" href="suggestion.pl?op=delete&edit_field=[% suggestionid | html %]"><i class="fa fa-trash"></i> Delete</a> >+ <a class="btn btn-default deletesuggestion" href="suggestion.pl?op=delete&suggestionid=[% suggestionid | html %]"><i class="fa fa-trash"></i> Delete</a> > </div> > > <fieldset class="rows"> >@@ -470,7 +470,7 @@ > <ul class="ui-tabs-nav"> > [% FOREACH suggestion IN suggestions %] > <li> >- <a href="#[% suggestion.suggestiontype | uri %]"> >+ <a href="#tab_[% loop.count %]"> > [% IF ( suggestion.suggestiontypelabel ) %] > [% IF (suggestion.suggestiontypelabel == "Pending") %]Pending > [% ELSIF (suggestion.suggestiontypelabel == "Accepted") %]Accepted >@@ -494,12 +494,12 @@ > [% END %] > > [% FOREACH suggestion IN suggestions %] >-<div id="[% suggestion.suggestiontype | html %]"> >-<form class="update_suggestions" name="f[% suggestion.suggestiontype | html %]" method="post" action="/cgi-bin/koha/suggestion/suggestion.pl#[% suggestion.suggestiontype | html %]"> >+<div id="tab_[% loop.count %]"> >+<form class="update_suggestions" name="f" method="post" action="/cgi-bin/koha/suggestion/suggestion.pl#tab_[% loop.count %]"> > > [% IF ( suggestion.suggestions_loop ) %] >-<p><a id="CheckAll[% suggestion.suggestiontype | html %]" href="#">Check all</a> | <a id="UncheckAll[% suggestion.suggestiontype | html %]" href="#">Uncheck all</a></p> >- <table id="[% suggestion.suggestiontype | html %]t" class="sorted"> >+<p><a class="checkall" href="#">Check all</a> | <a name="uncheckall" href="#">Uncheck all</a></p> >+ <table id="table_[% loop.count %]" class="sorted"> > <thead> > <tr> > <th class="NoSort noExport"> </th> >@@ -518,7 +518,7 @@ > [% FOREACH suggestions_loo IN suggestion.suggestions_loop %] > <tr> > <td> >- <input type="checkbox" name="edit_field" value="[% suggestions_loo.suggestionid | html %]" /> >+ <input type="checkbox" name="suggestionid" value="[% suggestions_loo.suggestionid | html %]" /> > </td> > <td> > <a href="suggestion.pl?suggestionid=[% suggestions_loo.suggestionid | uri %]&op=show" title="suggestion" > >@@ -571,80 +571,93 @@ > </td> > <td class="actions"> > <a class="btn btn-xs btn-default" href="suggestion.pl?suggestionid=[% suggestions_loo.suggestionid | html %]&op=edit"><i class="fa fa-pencil"></i> Edit</a> >- <a class="btn btn-default btn-xs deletesuggestion" href="suggestion.pl?op=delete&edit_field=[% suggestions_loo.suggestionid | html %]"><i class="fa fa-trash"></i> Delete</a> >+ <a class="btn btn-default btn-xs deletesuggestion" href="suggestion.pl?op=delete&suggestionid=[% suggestions_loo.suggestionid | html %]"><i class="fa fa-trash"></i> Delete</a> > </td> > </tr> > [% END %]</tbody> >- </table> <fieldset> >- <div id="select-reason[% suggestion.suggestiontype | html %]"> >- <div id="status[% suggestion.suggestiontype | html %]"> >- <label for="STATUS[% suggestion.suggestiontype | html %]">Mark selected as: </label> >- <select name="STATUS" id="STATUS[% suggestion.suggestiontype | html %]"> >- <option value=""> -- Choose a status --</option> >- >- [% IF (statusselected_ASKED ) %] >- <option value="ASKED" selected="selected">Pending</option> >- [% ELSE %] >- <option value="ASKED">Pending</option> >- [% END %] >- >- [% IF (statusselected_ACCEPTED ) %] >- <option value="ACCEPTED" selected="selected">Accepted</option> >- [% ELSE %] >- <option value="ACCEPTED">Accepted</option> >- [% END %] >+ </table> > >- [% IF (statusselected_CHECKED ) %] >- <option value="CHECKED" selected="selected">Checked</option> >- [% ELSE %] >- <option value="CHECKED">Checked</option> >- [% END %] >- >- [% IF ( statusselected_REJECTED ) %] >- <option value="REJECTED" selected="selected">Rejected</option> >- [% ELSE %] >- <option value="REJECTED">Rejected</option> >- [% END %] >- >- [% FOREACH s IN SuggestionStatuses %] >- <option value="[% s.authorised_value | html %]">[% s.lib | html %]</option> >- [% END %] >- </select> >- >- <label for="reason[% suggestion.suggestiontype | html %]">with this reason:</label> >- <select id="reason[% suggestion.suggestiontype | html %]" name="reason[% suggestion.suggestiontype | html %]"> >- <option value=""> -- Choose a reason -- </option> >- [% FOREACH reasonsloo IN suggestion.reasonsloop %] >- <option value="[% reasonsloo.lib | html %]">[% reasonsloo.lib | html %]</option> >- [% END %] >- <option value="other">Others...</option> >- </select> >- >- <span id="other_reason[% suggestion.suggestiontype | html %]"> >- <input type="text" size="31" id="select-other_reason[% suggestion.suggestiontype | html %]" name="other_reason[% suggestion.suggestiontype | html %]" placeholder="please note your reason here..." /> >- <a href="#back[% suggestion.suggestiontype | uri %]">Cancel</a> >- </span> >- >- <strong style="padding: 0 1em;">OR:</strong> >+ <div class="row"> >+ <h2 style="padding-left:1em;">Change selected suggestions</h3> >+ <div class="col-sm-4"> >+ <fieldset> >+ <div id="select-reason"> >+ <label for="STATUS">Mark selected as: </label> >+ <select name="STATUS" id="STATUS"> >+ <option value=""> -- Choose a status --</option> >+ >+ [% IF (statusselected_ASKED ) %] >+ <option value="ASKED" selected="selected">Pending</option> >+ [% ELSE %] >+ <option value="ASKED">Pending</option> >+ [% END %] >+ >+ [% IF (statusselected_ACCEPTED ) %] >+ <option value="ACCEPTED" selected="selected">Accepted</option> >+ [% ELSE %] >+ <option value="ACCEPTED">Accepted</option> >+ [% END %] >+ >+ [% IF (statusselected_CHECKED ) %] >+ <option value="CHECKED" selected="selected">Checked</option> >+ [% ELSE %] >+ <option value="CHECKED">Checked</option> >+ [% END %] >+ >+ [% IF ( statusselected_REJECTED ) %] >+ <option value="REJECTED" selected="selected">Rejected</option> >+ [% ELSE %] >+ <option value="REJECTED">Rejected</option> >+ [% END %] >+ >+ [% FOREACH s IN SuggestionStatuses %] >+ <option value="[% s.authorised_value | html %]">[% s.lib | html %]</option> >+ [% END %] >+ </select> >+ >+ <label for="reason">with this reason:</label> >+ <select name="reason"> >+ <option value=""> -- Choose a reason -- </option> >+ [% FOREACH reasonsloo IN suggestion.reasonsloop %] >+ <option value="[% reasonsloo.lib | html %]">[% reasonsloo.lib | html %]</option> >+ [% END %] >+ <option value="other">Others...</option> >+ </select> >+ >+ <span class="other_reason"> >+ <input type="text" size="31" name="other_reason" placeholder="please note your reason here..." /> >+ <a href="#" class="cancel_note">Cancel</a> >+ </span> >+ </div> >+ >+ <input type="hidden" name="branchcode" value="[% branchfilter | html %]" /> >+ <fieldset class="action"><button type="submit" class="btn btn-default btn-xs" value="update_status"/>Submit</button></fieldset> >+ </fieldset> >+ </div> >+ <div class="col-sm-4"> >+ <fieldset> >+ <label for="itemtype">Update item types with: </label> >+ [% PROCESS 'av-build-dropbox.inc' name="suggestion_itemtype", category="SUGGEST_FORMAT", size = 20 %] >+ <input type="hidden" name="branchcode" value="[% branchfilter | html %]" /> >+ <fieldset class="action"><button type="submit" class="btn btn-default btn-xs" value="update_itemtype"/>Submit</button></fieldset> >+ </fieldset> >+ </div> > >- <label for="[% suggestion.suggestiontype | html %]delete">Delete selected</label> >- <input type="checkbox" name="op" id="[% suggestion.suggestiontype | html %]delete" /> >+ <div class="col-sm-4"> >+ <fieldset> >+ <label for="delete_[% loop.count %]">Delete selected</label> >+ <input type="hidden" name="branchcode" value="[% branchfilter | html %]" /> >+ <fieldset class="action"><button type="submit" class="btn btn-default btn-xs" value="delete"/>Delete</button></fieldset> >+ </fieldset> >+ </div> > </div> >- </div> > >- <input type="hidden" name="branchcode" value="[% branchfilter | html %]" /> >- <input type="hidden" name="tabcode" value="[% suggestion.suggestiontype | html %]" /> >- <input type="hidden" name="op" value="change" /> >-</fieldset> >- <fieldset class="action"> >- <input type="submit" value="Submit" /></fieldset> >-</form> > [% ELSE %] > <b>No results.</b> > [% END %] >+</form> > </div> > [% END %] >- </div> > [% END %] > > [% UNLESS ( op_save ) %] >@@ -823,15 +836,8 @@ > [% INCLUDE 'datatables.inc' %] > [% INCLUDE 'columns_settings.inc' %] > [% Asset.js("lib/jquery/plugins/jquery.checkboxes.min.js") | $raw %] >- <script> >- /** >- * displayOther. >- * This function display the select or an textaera to write a reason. >- */ >- function displayOther(id,show,hide){ >- $("#"+hide+id).hide(); >- $("#"+show+id).show(); >- } >+ >+ <script type="text/javascript"> > $(document).ready(function() { > $('#suggestiontabs').tabs(); > >@@ -849,36 +855,26 @@ > [% END %] > [% END %] > >- [% FOREACH suggestion IN suggestions %] >- // functions for [% suggestion.suggestiontype | html %] interactions >- $("#CheckAll[% suggestion.suggestiontype | html %]").click(function(e){ >- $("#[% suggestion.suggestiontype | html %]t").checkCheckboxes(); >- e.preventDefault(); >+ $(".checkall").click(function(e){ >+ $(this).parent(form).checkCheckboxes(); >+ return false; > }); >- $("#UncheckAll[% suggestion.suggestiontype | html %]").click(function(e){ >- $("#[% suggestion.suggestiontype | html %]t").unCheckCheckboxes(); >- e.preventDefault(); >+ $(".uncheckall").click(function(e){ >+ $(this).parent(form).unCheckCheckboxes(); >+ return false; > }); >- $("#other_reason[% suggestion.suggestiontype | html %]").hide(); >- $("#reason[% suggestion.suggestiontype | html %]").change(function(){ >+ $(".other_reason").hide(); >+ $("select[name='reason']").change(function(){ > if($(this).val() == "other"){ > $(this).hide(); >- $("#other_reason[% suggestion.suggestiontype | html %]").show(); >- } >- }); >- $("#[% suggestion.suggestiontype | html %]delete").change(function(){ >- if(this.checked){ >- $("form[name='f[% suggestion.suggestiontype | html %]'] input[name=op]").attr("value","delete"); >- } else { >- $("form[name='f[% suggestion.suggestiontype | html %]'] input[name=op]").attr("value","change"); >+ $(this).siblings(".other_reason").show(); > } > }); > >- [% END %] >- $("a[href*=back]").click(function(){ >- var sid = $(this).attr("href").replace(/#back/,""); >- $("#reason"+sid).show().find("option[value='']").attr("selected","selected"); >- $("#other_reason"+sid).hide(); >+ $("a.cancel_note").click(function(e) { >+ $(this).parent().siblings("select").show().find("option[value='']").attr("selected","selected"); >+ $(this).siblings("input[name='other_reason']").hide(); >+ e.preventDefault(); > }); > $("h4.local_collapse a").click(function(){ > $(this).parent().parent().find("ol").toggle(); >@@ -925,27 +921,33 @@ > } > }); > >- $("form.update_suggestions").on("submit", function(e){ >- var form = this; >- var action_delete_selected = $(this).find("input[value='delete']").is(":checked"); >- if ( action_delete_selected ) { >- var suggestions_to_delete = $(this).find("input[name='edit_field']:checked"); >- if ( suggestions_to_delete.length == 0 ) { >- alert(_("Please select at least one suggestion to delete")); >- e.preventDefault(); >- return false; >- } else if ( suggestions_to_delete.length == 1 ) { >+ $("button[type='submit']").on("click", function(e) { >+ var form = $(this).parents("form"); >+ var action = $(this).val(); >+ var selected_suggestions = $(form).find("input[name='suggestionid']:checked"); >+ if ( selected_suggestions.length == 0 ) { >+ alert(_("Please select at least one suggestion")); >+ e.preventDefault(); >+ return false; >+ } >+ if ( action == "delete" ) { >+ if ( selected_suggestions.length == 1 ) { > if ( ! confirm(_("Are you sure you want to delete this suggestion?")) ) { > e.preventDefault(); > return false; > } >- } else if ( suggestions_to_delete.length > 1 ) { >+ } else if ( selected_suggestions.length > 1 ) { > if ( ! confirm(_("Are you sure you want to delete these suggestions?")) ) { > e.preventDefault(); > return false; > } > } > } >+ >+ $('<input />').attr('type', 'hidden') >+ .attr('name', "op") >+ .attr('value', action) >+ .appendTo(form); > return true; > }); > }); >diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl >index 6b655f873d..5f1210932c 100755 >--- a/suggestion/suggestion.pl >+++ b/suggestion/suggestion.pl >@@ -83,7 +83,7 @@ my $input = CGI->new; > my $redirect = $input->param('redirect'); > my $suggestedbyme = (defined $input->param('suggestedbyme')? $input->param('suggestedbyme'):1); > my $op = $input->param('op')||'else'; >-my @editsuggestions = $input->multi_param('edit_field'); >+my @editsuggestions = $input->multi_param('suggestionid'); > my $suggestedby = $input->param('suggestedby'); > my $returnsuggestedby = $input->param('returnsuggestedby'); > my $returnsuggested = $input->param('returnsuggested'); >@@ -105,7 +105,7 @@ $suggestion_only->{STATUS} = $suggestion_ref->{STATUS}; > > delete $$suggestion_ref{$_} foreach qw( suggestedbyme op displayby tabcode edit_field ); > foreach (keys %$suggestion_ref){ >- delete $$suggestion_ref{$_} if (!$$suggestion_ref{$_} && ($op eq 'else' || $op eq 'change')); >+ delete $$suggestion_ref{$_} if (!$$suggestion_ref{$_} && ($op eq 'else' )); > } > my ( $template, $borrowernumber, $cookie, $userflags ) = get_template_and_user( > { >@@ -210,7 +210,7 @@ elsif ($op=~/edit/) { > Init($suggestion_ref); > $op ='save'; > } >-elsif ($op eq "change" ) { >+elsif ($op eq "update_status" ) { > > my $suggestion; > # set accepted/rejected/managed informations if applicable >@@ -234,9 +234,9 @@ elsif ($op eq "change" ) { > $suggestion->{managedby} = C4::Context->userenv->{number}; > $suggestion->{STATUS} = $STATUS; > } >- if ( my $reason = $input->param("reason$tabcode") ) { >+ if ( my $reason = $input->param("reason") ) { > if ( $reason eq "other" ) { >- $reason = $input->param("other_reason$tabcode"); >+ $reason = $input->param("other_reason"); > } > $suggestion->{reason} = $reason; > } >@@ -266,6 +266,13 @@ elsif ($op eq "change" ) { > } > $op = 'else'; > } >+elsif ( $op eq 'update_itemtype' ) { >+ my $new_itemtype = $input->param('suggestion_itemtype'); >+ foreach my $suggestionid (@editsuggestions) { >+ next unless $suggestionid; >+ &ModSuggestion({ suggestionid => $suggestionid, itemtype => $new_itemtype }); >+ } >+} > elsif ( $op eq 'show' ) { > $suggestion_ref=&GetSuggestion($$suggestion_ref{'suggestionid'}); > my $budget = GetBudget $$suggestion_ref{budgetid}; >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 23594
:
94469
|
94520
|
94521
|
94834
|
94835
|
94836
|
97663
|
97664
|
97665
|
97693
|
97781
|
98094
| 98095 |
98096
|
98097
|
98098
|
98099