X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Fbranchtransfers.pl;h=cb10b5b0f1654fee8d658eeda4c209c00e32e155;hb=f41f272ff087d65ed11d760e6c7c58818c3a24d4;hp=ad7aa9afd5e4babe6dbd24d0b4aab6a32974c9c7;hpb=7650a34754d5265a749c070228ad04b397d3cf3a;p=koha-ffzg.git diff --git a/circ/branchtransfers.pl b/circ/branchtransfers.pl index ad7aa9afd5..cb10b5b0f1 100755 --- a/circ/branchtransfers.pl +++ b/circ/branchtransfers.pl @@ -7,161 +7,159 @@ # # 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 2 of the License, or (at your option) any later -# version. +# 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. +# 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 strict; -use warnings; -use CGI; -use C4::Circulation; -use C4::Output; -use C4::Reserves; -use C4::Biblio; -use C4::Items; -use C4::Auth qw/:DEFAULT get_session/; -use C4::Branch; # GetBranches -use C4::Koha; +# 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::Circulation qw( transferbook barcodedecode ); +use C4::Output qw( output_html_with_http_headers ); +use C4::Reserves qw( ModReserve ModReserveAffect ); +use C4::Auth qw( get_session get_template_and_user ); use C4::Members; +use Koha::BiblioFrameworks; +use Koha::AuthorisedValues; +use Koha::Holds; +use Koha::Items; +use Koha::Patrons; ############################################### # Getting state -my $query = new CGI; +my $query = CGI->new; if (!C4::Context->userenv){ my $sessionID = $query->cookie("CGISESSID"); my $session; $session = get_session($sessionID) if $sessionID; - if (!$session or $session->param('branch') eq 'NO_LIBRARY_SET'){ + if (!$session){ # no branch set we can't transfer - print $query->redirect("/cgi-bin/koha/circ/selectbranchprinter.pl"); + print $query->redirect("/cgi-bin/koha/circ/set-library.pl"); exit; } } ####################################################################################### # Make the page ..... -my ($template, $user, $cookie) = get_template_and_user( +my ($template, $user, $cookie, $flags ) = get_template_and_user( { - template_name => "circ/branchtransfers.tmpl", + template_name => "circ/branchtransfers.tt", query => $query, type => "intranet", - authnotrequired => 0, flagsrequired => { circulate => "circulate_remaining_permissions" }, } ); -my $branches = GetBranches; +# Check transfers is allowed from system preference +if ( C4::Context->preference("IndependentBranchesTransfers") && !C4::Context->IsSuperLibrarian() ) { + print $query->redirect("/cgi-bin/koha/errors/403.pl"); + exit; +} my $messages; my $found; my $reserved; my $waiting; +my $hold_transferred; +my $hold_processed; my $reqmessage; my $cancelled; -my $setwaiting; +my $settransit; my $request = $query->param('request') || ''; my $borrowernumber = $query->param('borrowernumber') || 0; my $tobranchcd = $query->param('tobranchcd') || ''; +my $trigger = 'Manual'; my $ignoreRs = 0; ############ # Deal with the requests.... if ( $request eq "KillWaiting" ) { my $item = $query->param('itemnumber'); - CancelReserve( 0, $item, $borrowernumber ); - $cancelled = 1; - $reqmessage = 1; + my $holds = Koha::Holds->search({ + itemnumber => $item, + borrowernumber => $borrowernumber + }); + if ( $holds->count ) { + $holds->next->cancel; + $cancelled = 1; + $reqmessage = 1; + } # FIXME else? } -elsif ( $request eq "SetWaiting" ) { +elsif ( $request eq "SetTransit" ) { my $item = $query->param('itemnumber'); - ModReserveAffect( $item, $borrowernumber ); + my $reserve_id = $query->param('reserve_id'); + ModReserveAffect( $item, $borrowernumber, 1, $reserve_id ); $ignoreRs = 1; - $setwaiting = 1; + $settransit = 1; $reqmessage = 1; + $trigger = 'Reserve'; } elsif ( $request eq 'KillReserved' ) { - my $biblio = $query->param('biblionumber'); - CancelReserve( $biblio, 0, $borrowernumber ); - $cancelled = 1; - $reqmessage = 1; + my $biblionumber = $query->param('biblionumber'); + my $reserve_id = $query->param('reserve_id'); + my $hold = Koha::Holds->find({ reserve_id => $reserve_id }); + if ( $hold ) { + $hold->cancel; + $cancelled = 1; + $reqmessage = 1; + } # FIXME else? } -# collect the stack of books already transfered so they can printed... +# collect the stack of books already transferred so they can printed... my @trsfitemloop; -my %transfereditems; -my $transfered; +my $transferred; my $barcode = $query->param('barcode'); -# strip whitespace -defined $barcode and $barcode =~ s/\s*//g; # FIXME: barcodeInputFilter +# remove leading/trailing whitespace +$barcode = barcodedecode($barcode) if $barcode; # warn "barcode : $barcode"; if ($barcode) { - my $iteminformation; - ( $transfered, $messages, $iteminformation ) = - transferbook( $tobranchcd, $barcode, $ignoreRs ); -# use Data::Dumper; -# warn "Transfered : $transfered / ".Dumper($messages); - $found = $messages->{'ResFound'}; - if ($transfered) { - my %item; + ( $transferred, $messages ) = + transferbook({ + from_branch => C4::Context->userenv->{'branch'}, + to_branch => $tobranchcd, + barcode => $barcode, + ignore_reserves => $ignoreRs, + trigger => $trigger + }); + my $item = Koha::Items->find({ barcode => $barcode }); + $found = $messages->{'ResFound'} unless $settransit; + if ($transferred) { + my %trsfitem; my $frbranchcd = C4::Context->userenv->{'branch'}; -# if ( not($found) ) { - $item{'biblionumber'} = $iteminformation->{'biblionumber'}; - $item{'itemnumber'} = $iteminformation->{'itemnumber'}; - $item{'title'} = $iteminformation->{'title'}; - $item{'author'} = $iteminformation->{'author'}; - $item{'itemtype'} = $iteminformation->{'itemtype'}; - $item{'ccode'} = $iteminformation->{'ccode'}; - $item{'itemcallnumber'} = $iteminformation->{'itemcallnumber'}; - $item{'location'} = GetKohaAuthorisedValueLib("LOC",$iteminformation->{'location'}); - $item{'frbrname'} = $branches->{$frbranchcd}->{'branchname'}; - $item{'tobrname'} = $branches->{$tobranchcd}->{'branchname'}; -# } - $item{counter} = 0; - $item{barcode} = $barcode; - $item{frombrcd} = $frbranchcd; - $item{tobrcd} = $tobranchcd; - push( @trsfitemloop, \%item ); -# warn Dumper(@trsfitemloop); + $trsfitem{item} = $item; + $trsfitem{counter} = 0; + $trsfitem{frombrcd} = $frbranchcd; + $trsfitem{tobrcd} = $tobranchcd; + push( @trsfitemloop, \%trsfitem ); } } foreach ( $query->param ) { (next) unless (/bc-(\d*)/); my $counter = $1; - my %item; + my %trsfitem; my $bc = $query->param("bc-$counter"); my $frbcd = $query->param("fb-$counter"); my $tobcd = $query->param("tb-$counter"); $counter++; - $item{counter} = $counter; - $item{barcode} = $bc; - $item{frombrcd} = $frbcd; - $item{tobrcd} = $tobcd; - my ($iteminformation) = GetBiblioFromItemNumber( GetItemnumberFromBarcode($bc) ); - $item{'biblionumber'} = $iteminformation->{'biblionumber'}; - $item{'itemnumber'} = $iteminformation->{'itemnumber'}; - $item{'title'} = $iteminformation->{'title'}; - $item{'author'} = $iteminformation->{'author'}; - $item{'itemtype'} = $iteminformation->{'itemtype'}; - $item{'ccode'} = $iteminformation->{'ccode'}; - $item{'itemcallnumber'} = $iteminformation->{'itemcallnumber'}; - $item{'location'} = GetKohaAuthorisedValueLib("LOC",$iteminformation->{'location'}); - $item{'frbrname'} = $branches->{$frbcd}->{'branchname'}; - $item{'tobrname'} = $branches->{$tobcd}->{'branchname'}; - push( @trsfitemloop, \%item ); + $trsfitem{counter} = $counter; + $trsfitem{frombrcd} = $frbcd; + $trsfitem{tobrcd} = $tobcd; + my $item = Koha::Items->find({ barcode => $bc }); + $trsfitem{item} = $item; + push( @trsfitemloop, \%trsfitem ); } my $itemnumber; @@ -169,28 +167,27 @@ my $biblionumber; ##################### -if ($found) { - my $res = $messages->{'ResFound'}; - $itemnumber = $res->{'itemnumber'}; +my $hold; +if ($found){ + $hold = Koha::Holds->find( + { reserve_id => $found->{reserve_id} }, + { prefetch => ['item','patron'] } + ); + $itemnumber = $found->{'itemnumber'}; + $borrowernumber = $found->{'borrowernumber'}; - if ( $res->{'ResFound'} eq "Waiting" ) { + if ( $found->{'ResFound'} eq "Waiting" ) { $waiting = 1; - } - elsif ( $res->{'ResFound'} eq "Reserved" ) { + } elsif ( $found->{'ResFound'} eq "Transferred" ) { + $hold_transferred = 1; + } elsif ( $found->{'ResFound'} eq "Processing" ) { + $hold_processed = 1; + } elsif ( $found->{'ResFound'} eq "Reserved" ) { $reserved = 1; - $biblionumber = $res->{'biblionumber'}; + $biblionumber = $found->{'biblionumber'}; } } -##################### - -# Used for branch transfer limits error messages. -my $codeTypeDescription = 'Collection Code'; -my $codeType = C4::Context->preference("BranchTransferLimitsType"); -if ( $codeType eq 'itemtype' ) { - $codeTypeDescription = 'Item Type'; -} - my @errmsgloop; foreach my $code ( keys %$messages ) { if ( $code ne 'WasTransfered' ) { @@ -200,38 +197,38 @@ foreach my $code ( keys %$messages ) { $err{errbadcode} = 1; } elsif ( $code eq "NotAllowed" ) { - warn "NotAllowed: $messages->{'NotAllowed'} to " . $branches->{ $messages->{'NotAllowed'} }->{'branchname'}; + warn "NotAllowed: $messages->{'NotAllowed'} to branchcode " . $messages->{'NotAllowed'}; # Do we really want a error log message here? --atz $err{errnotallowed} = 1; my ( $tbr, $typecode ) = split( /::/, $messages->{'NotAllowed'} ); - $err{tbr} = $branches->{ $tbr }->{'branchname'}; + $err{tbr} = $tbr; $err{code} = $typecode; - $err{codeType} = $codeTypeDescription; - } - elsif ( $code eq 'IsPermanent' ) { - $err{errispermanent} = 1; - $err{msg} = $branches->{ $messages->{'IsPermanent'} }->{'branchname'}; } elsif ( $code eq 'WasReturned' ) { $err{errwasreturned} = 1; $err{borrowernumber} = $messages->{'WasReturned'}; - my $borrower = GetMember('borrowernumber'=>$messages->{'WasReturned'}); - $err{title} = $borrower->{'title'}; - $err{firstname} = $borrower->{'firstname'}; - $err{surname} = $borrower->{'surname'}; - $err{cardnumber} = $borrower->{'cardnumber'}; + my $patron = Koha::Patrons->find( $messages->{'WasReturned'} ); + if ( $patron ) { # Just in case... + $err{patron} = $patron; + } + } + elsif ( $code eq 'DestinationEqualsHolding' ) { + $err{errdesteqholding} = 1; } - $err{errdesteqholding} = ( $code eq 'DestinationEqualsHolding' ); - push( @errmsgloop, \%err ); + push( @errmsgloop, \%err ) if (keys %err); } } # use Data::Dumper; # warn "FINAL ============= ".Dumper(@trsfitemloop); + $template->param( found => $found, + hold => $hold, reserved => $reserved, waiting => $waiting, + transferred => $hold_transferred, + processing => $hold_processed, borrowernumber => $borrowernumber, itemnumber => $itemnumber, barcode => $barcode, @@ -239,11 +236,14 @@ $template->param( tobranchcd => $tobranchcd, reqmessage => $reqmessage, cancelled => $cancelled, - setwaiting => $setwaiting, + settransit => $settransit, trsfitemloop => \@trsfitemloop, - branchoptionloop => GetBranchesLoop($tobranchcd), errmsgloop => \@errmsgloop, - CircAutocompl => C4::Context->preference("CircAutocompl") + PatronAutoComplete => C4::Context->preference("PatronAutoComplete"), ); + +# Checking if there is a Fast Cataloging Framework +$template->param( fast_cataloging => 1 ) if Koha::BiblioFrameworks->find( 'FA' ); + output_html_with_http_headers $query, $cookie, $template->output;