From 2ea59724947a8e11eef660579d2515e4f73dd65d Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 1 Jul 2016 15:27:19 -0400 Subject: [PATCH] Bug 8030 - Change pickup location of a hold from patron record To test: 1 - Place some holds for a patron 2 - Load the patron into checkout module 3 - View thier holds tab, should have a dropdwon for location 4 - Alter the location 5 - You should recieve a confirmation box 6 - Confirm that pressing cancel does not update holds 7 - Confirm that pressing Yes does update the hold 8 - Confirm that waiting holds are not updateable --- koha-tmpl/intranet-tmpl/prog/js/holds.js | 29 +++++++++++++- svc/hold/update_location | 65 ++++++++++++++++++++++++++++++++ svc/holds | 3 +- 3 files changed, 95 insertions(+), 2 deletions(-) create mode 100755 svc/hold/update_location diff --git a/koha-tmpl/intranet-tmpl/prog/js/holds.js b/koha-tmpl/intranet-tmpl/prog/js/holds.js index 3182a30..fdc28eb 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/holds.js +++ b/koha-tmpl/intranet-tmpl/prog/js/holds.js @@ -100,7 +100,17 @@ $(document).ready(function() { }, { "mDataProp": function( oObj ) { - return oObj.branchcode || ""; + if( oObj.branches.length > 1 && oObj.found !== 'W' ){ + var branchSelect=''; + return branchSelect; + } + else { return oObj.branchcode || ""; } } }, { "mDataProp": "expirationdate_formatted" }, @@ -176,6 +186,23 @@ $(document).ready(function() { } }); }); + + $(".hold_location_select").change(function(){ + if( confirm( _("Do you want to change the pickup location?") ) ){ + $.post('/cgi-bin/koha/svc/hold/update_location', { "reserve_id": $(this).attr('reserve_id'), "updated_branch": $(this).val() }, function( data ){ + if ( data.success ) { + holdsTable.api().ajax.reload(); + } + else { + if ( data.error == "HOLD_NOT_FOUND" ) { + alert ( RESUME_HOLD_ERROR_NOT_FOUND ); + holdsTable.api().ajax.reload(); + } + } + }); + } + }); + }); if ( $("#holds-table").length ) { diff --git a/svc/hold/update_location b/svc/hold/update_location new file mode 100755 index 0000000..7abb766 --- /dev/null +++ b/svc/hold/update_location @@ -0,0 +1,65 @@ +#!/usr/bin/perl + +# Copyright 2015 ByWater Solutions +# +# 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 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use CGI; +use JSON qw(to_json); + +use C4::Context; +use C4::Output qw(output_with_http_headers); +use C4::Auth qw(check_cookie_auth); +use C4::Reserves qw(ModReserve); +use Koha::DateUtils qw(dt_from_string); +use Koha::Holds; + +my $input = new CGI; + +my ( $auth_status, $sessionID ) = + check_cookie_auth( $input->cookie('CGISESSID'), { circulate => 'circulate_remaining_permissions' } ); + +if ( $auth_status ne "ok" ) { + print $input->header(-type => 'text/plain', -status => '403 Forbidden'); + exit 0; +} + +my $reserve_id = $input->param('reserve_id'); +my $updated_branch = $input->param('updated_branch'); + +my $hold = Koha::Holds->find( $reserve_id ); + +unless ( $hold ) { + my $json = to_json( { success => 0, error => "HOLD_NOT_FOUND" } ); + output_with_http_headers( $input, undef, $json, "json" ); + exit; +} + +ModReserve( { + rank => $hold->priority, + reserve_id => $hold->reserve_id, + branchcode => $updated_branch, + itemnumber => $hold->itemnumber, + borrowernumber => $hold->borrowernumber, + biblionumber => $hold->biblionumber + }); + +$hold = Koha::Holds->find( $reserve_id ); + +my $json = to_json( { success => ( $hold->branchcode eq $updated_branch ) } ); +output_with_http_headers( $input, undef, $json, "json" ); diff --git a/svc/holds b/svc/holds index 1db9338..6ae96f4 100755 --- a/svc/holds +++ b/svc/holds @@ -24,7 +24,7 @@ use JSON qw(to_json); use C4::Auth qw(check_cookie_auth); use C4::Biblio qw(GetMarcBiblio GetFrameworkCode GetRecordValue ); -use C4::Branch qw(GetBranchName); +use C4::Branch qw(GetBranchName GetBranchesLoop); use C4::Charset; use C4::Circulation qw(GetTransfers); use C4::Context; @@ -86,6 +86,7 @@ while ( my $h = $holds_rs->next() ) { author => $h->biblio()->author(), reserve_id => $h->reserve_id(), branchcode => $h->branch()->branchname(), + branches => GetBranchesLoop($h->branch()->branchcode()), reservedate => $h->reservedate(), expirationdate => $h->expirationdate(), suspend => $h->suspend(), -- 2.1.4