X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FReserves.pm;h=4097f4fc3a82d454a629a8342f5b529548863f9a;hb=ea9e0804cd05ee0b0ff386afe28561a2d3cf23e0;hp=689fbeca6a0ed13e1a9694840affe3787bfeb290;hpb=25cb12ec97c7288d418af8912aecd3714699b3c1;p=koha_gimpoz diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 689fbeca6a..4097f4fc3a 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -24,7 +24,6 @@ package C4::Reserves; use strict; -require Exporter; use C4::Context; use C4::Biblio; use C4::Items; @@ -32,26 +31,10 @@ use C4::Search; use C4::Circulation; use C4::Accounts; -INIT { - # an ugly hack to ensure that - # various subs get imported - # into C4::Reserves' symbol table - # FIXME: hopefully can remove once - # we get a better idea of exactly - # how Exporter/use/require/import - # should be used with modules - # that currently call functions - # from each other. - import C4::Items; -} - -our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,%EXPORT_TAGS); +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); my $library_name = C4::Context->preference("LibraryName"); -# set the version for version checking -$VERSION = 3.00; - =head1 NAME C4::Reserves - Koha functions for dealing with reservation. @@ -96,32 +79,36 @@ C4::Reserves - Koha functions for dealing with reservation. =cut -@ISA = qw(Exporter); - -@EXPORT = qw( - &AddReserve - - &GetReservesFromItemnumber - &GetReservesFromBiblionumber - &GetReservesFromBorrowernumber - &GetReservesForBranch - &GetReservesToBranch - &GetReserveCount - &GetReserveFee - - &GetOtherReserves +BEGIN { + # set the version for version checking + $VERSION = 3.02; + require Exporter; + @ISA = qw(Exporter); + @EXPORT = qw( + &AddReserve - &ModReserveFill - &ModReserveAffect - &ModReserve - &ModReserveStatus - &ModReserveCancelAll - &ModReserveMinusPriority - - &CheckReserves - &CancelReserve -); - + &GetReservesFromItemnumber + &GetReservesFromBiblionumber + &GetReservesFromBorrowernumber + &GetReservesForBranch + &GetReservesToBranch + &GetReserveCount + &GetReserveFee + &GetReserveInfo + + &GetOtherReserves + + &ModReserveFill + &ModReserveAffect + &ModReserve + &ModReserveStatus + &ModReserveCancelAll + &ModReserveMinusPriority + + &CheckReserves + &CancelReserve + ); +} =item AddReserve @@ -232,9 +219,7 @@ sub GetReservesFromBiblionumber { itemnumber, reservenotes FROM reserves - WHERE cancellationdate IS NULL - AND (found <> \'F\' OR found IS NULL) - AND biblionumber = ? + WHERE biblionumber = ? ORDER BY priority"; my $sth = $dbh->prepare($query); $sth->execute($biblionumber); @@ -303,8 +288,6 @@ sub GetReservesFromItemnumber { SELECT reservedate,borrowernumber,branchcode FROM reserves WHERE itemnumber=? - AND cancellationdate IS NULL - AND (found <> 'F' OR found IS NULL) "; my $sth_res = $dbh->prepare($query); $sth_res->execute($itemnumber); @@ -329,7 +312,6 @@ sub GetReservesFromBorrowernumber { SELECT * FROM reserves WHERE borrowernumber=? - AND cancellationdate IS NULL AND found =? ORDER BY reservedate "); @@ -339,8 +321,6 @@ sub GetReservesFromBorrowernumber { SELECT * FROM reserves WHERE borrowernumber=? - AND cancellationdate IS NULL - AND (found != 'F' or found is null) ORDER BY reservedate "); $sth->execute($borrowernumber); @@ -367,8 +347,6 @@ sub GetReserveCount { SELECT COUNT(*) AS counter FROM reserves WHERE borrowernumber = ? - AND cancellationdate IS NULL - AND (found != \'F\' OR found IS NULL) '; my $sth = $dbh->prepare($query); $sth->execute($borrowernumber); @@ -452,7 +430,7 @@ sub GetReserveFee { my $data = $sth->fetchrow_hashref; $sth->finish(); my $fee = $data->{'reservefee'}; - my $cntitems = @- > $bibitems; + my $cntitems = @- > $bibitems; # FIXME: @- is a regexp match var. Unclear and probably INCORRECT usage here. if ( $fee > 0 ) { @@ -479,15 +457,9 @@ sub GetReserveFee { } $x++; } - if ( $const eq 'o' ) { - if ( $found == 1 ) { - push @biblioitems, $data1; - } - } - else { - if ( $found == 0 ) { - push @biblioitems, $data1; - } + if ( $found == 0 or + ($found == 1 and $const eq 'o')) { + push @biblioitems, $data1; } } } @@ -498,33 +470,21 @@ sub GetReserveFee { my $allissued = 1; while ( $x < $cntitemsfound ) { my $bitdata = $biblioitems[$x]; - my $sth2 = $dbh->prepare( - "SELECT * FROM items - WHERE biblioitemnumber = ?" - ); + my $sth2 = $dbh->prepare("SELECT * FROM items WHERE biblioitemnumber = ?"); $sth2->execute( $bitdata->{'biblioitemnumber'} ); while ( my $itdata = $sth2->fetchrow_hashref ) { - my $sth3 = $dbh->prepare( - "SELECT * FROM issues - WHERE itemnumber = ? - AND returndate IS NULL" - ); + my $sth3 = $dbh->prepare("SELECT * FROM issues WHERE itemnumber = ?"); $sth3->execute( $itdata->{'itemnumber'} ); - if ( my $isdata = $sth3->fetchrow_hashref ) { - } - else { + unless ($sth3->rows()) { $allissued = 0; } } $x++; } if ( $allissued == 0 ) { - my $rsth = - $dbh->prepare("SELECT * FROM reserves WHERE biblionumber = ?"); + my $rsth = $dbh->prepare("SELECT * FROM reserves WHERE biblionumber = ?"); $rsth->execute($biblionumber); - if ( my $rdata = $rsth->fetchrow_hashref ) { - } - else { + unless ($rsth->rows()) { $fee = 0; } } @@ -546,9 +506,8 @@ sub GetReservesToBranch { my $sth = $dbh->prepare( "SELECT borrowernumber,reservedate,itemnumber,timestamp FROM reserves - WHERE priority='0' AND cancellationdate is null - AND branchcode=? - AND found IS NULL " + WHERE priority='0' + AND branchcode=?" ); $sth->execute( $frombranch ); my @transreserv; @@ -573,7 +532,6 @@ sub GetReservesForBranch { my $query = "SELECT borrowernumber,reservedate,itemnumber,waitingdate FROM reserves WHERE priority='0' - AND cancellationdate IS NULL AND found='W' "; if ($frombranch){ $query .= " AND branchcode=? "; @@ -739,6 +697,21 @@ sub CancelReserve { my $sth = $dbh->prepare($query); $sth->execute( $item, $borr ); $sth->finish; + $query = " + INSERT INTO old_reserves + SELECT * FROM reserves + WHERE itemnumber = ? + AND borrowernumber = ? + "; + $sth = $dbh->prepare($query); + $sth->execute( $item, $borr ); + $query = " + DELETE FROM reserves + WHERE itemnumber = ? + AND borrowernumber = ? + "; + $sth = $dbh->prepare($query); + $sth->execute( $item, $borr ); } else { # removing a reserve record.... @@ -750,7 +723,6 @@ sub CancelReserve { AND borrowernumber = ? AND cancellationdate IS NULL AND itemnumber IS NULL - AND (found <> 'F' OR found IS NULL) /; my $sth = $dbh->prepare($query); $sth->execute( $biblio, $borr ); @@ -763,8 +735,6 @@ sub CancelReserve { priority = 0 WHERE biblionumber = ? AND borrowernumber = ? - AND cancellationdate IS NULL - AND (found <> 'F' or found IS NULL) /; # update the database, removing the record... @@ -772,8 +742,25 @@ sub CancelReserve { $sth->execute( $biblio, $borr ); $sth->finish; + $query = qq/ + INSERT INTO old_reserves + SELECT * FROM reserves + WHERE biblionumber = ? + AND borrowernumber = ? + /; + $sth = $dbh->prepare($query); + $sth->execute( $biblio, $borr ); + + $query = qq/ + DELETE FROM reserves + WHERE biblionumber = ? + AND borrowernumber = ? + /; + $sth = $dbh->prepare($query); + $sth->execute( $biblio, $borr ); + # now fix the priority on the others.... - _FixPriority( $priority, $biblio ); + _FixPriority($biblio,$borr,$priority); } } @@ -795,12 +782,26 @@ sub ModReserve { SET cancellationdate=now() WHERE biblionumber = ? AND borrowernumber = ? - AND cancellationdate is NULL - AND (found <> 'F' or found is NULL) /; my $sth = $dbh->prepare($query); $sth->execute( $biblio, $borrower ); $sth->finish; + $query = qq/ + INSERT INTO old_reserves + SELECT * + FROM reserves + WHERE biblionumber = ? + AND borrowernumber = ? + /; + $sth = $dbh->prepare($query); + $sth->execute( $biblio, $borrower ); + $query = qq/ + DELETE FROM reserves + WHERE biblionumber = ? + AND borrowernumber = ? + /; + $sth = $dbh->prepare($query); + $sth->execute( $biblio, $borrower ); } else { @@ -808,8 +809,6 @@ sub ModReserve { UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = ?, found = NULL WHERE biblionumber = ? AND borrowernumber = ? - AND cancellationdate is NULL - AND (found <> 'F' or found is NULL) /; my $sth = $dbh->prepare($query); $sth->execute( $rank, $branch,$itemnumber, $biblio, $borrower); @@ -862,10 +861,27 @@ sub ModReserveFill { $sth->execute( $biblionumber, $resdate, $borrowernumber ); $sth->finish; + # move to old_reserves + $query = "INSERT INTO old_reserves + SELECT * FROM reserves + WHERE biblionumber = ? + AND reservedate = ? + AND borrowernumber = ? + "; + $sth = $dbh->prepare($query); + $sth->execute( $biblionumber, $resdate, $borrowernumber ); + $query = "DELETE FROM reserves + WHERE biblionumber = ? + AND reservedate = ? + AND borrowernumber = ? + "; + $sth = $dbh->prepare($query); + $sth->execute( $biblionumber, $resdate, $borrowernumber ); + # now fix the priority on the others (if the priority wasn't # already sorted!).... unless ( $priority == 0 ) { - _FixPriority( $priority, $biblionumber ); + _FixPriority($biblionumber, $borrowernumber, $priority); } } @@ -929,8 +945,6 @@ sub ModReserveAffect { itemnumber = ? WHERE borrowernumber = ? AND biblionumber = ? - AND reserves.cancellationdate IS NULL - AND (reserves.found <> 'F' OR reserves.found IS NULL) "; } else { @@ -943,8 +957,6 @@ sub ModReserveAffect { itemnumber = ? WHERE borrowernumber = ? AND biblionumber = ? - AND reserves.cancellationdate IS NULL - AND (reserves.found <> 'F' OR reserves.found IS NULL) "; } $sth = $dbh->prepare($query); @@ -991,8 +1003,7 @@ sub ModReserveMinusPriority { my $query = " UPDATE reserves SET priority = 0 , itemnumber = ? - WHERE cancellationdate IS NULL - AND borrowernumber=? + WHERE borrowernumber=? AND biblionumber=? "; my $sth_upd = $dbh->prepare($query); @@ -1004,7 +1015,6 @@ sub ModReserveMinusPriority { SET priority = priority-1 WHERE biblionumber = ? AND priority > 0 - AND cancellationdate IS NULL "; $sth_upd = $dbh->prepare($query); $sth_upd->execute( $biblionumber ); @@ -1012,6 +1022,42 @@ sub ModReserveMinusPriority { $sth_upd->finish; } +=item GetReserveInfo + +&GetReserveInfo($borrowernumber,$biblionumber); + + Get item and borrower details for a current hold. + Current implementation this query should have a single result. +=cut + +sub GetReserveInfo { + my ( $borrowernumber, $biblionumber ) = @_; + my $dbh = C4::Context->dbh; + my $strsth="SELECT reservedate, reservenotes, reserves.borrowernumber, + reserves.biblionumber, reserves.branchcode, + notificationdate, reminderdate, priority, found, + firstname, surname, phone, + email, address, address2, + cardnumber, city, zipcode, + biblio.title, biblio.author, + items.holdingbranch, items.itemcallnumber, items.itemnumber, + barcode, notes + FROM reserves left join items + ON items.itemnumber=reserves.itemnumber , + borrowers, biblio + WHERE + reserves.borrowernumber=? && + reserves.biblionumber=? && + reserves.borrowernumber=borrowers.borrowernumber && + reserves.biblionumber=biblio.biblionumber "; + my $sth = $dbh->prepare($strsth); + $sth->execute($borrowernumber,$biblionumber); + + my $data = $sth->fetchrow_hashref; + return $data; + +} + =item _FixPriority &_FixPriority($biblio,$borrowernumber,$rank); @@ -1039,7 +1085,6 @@ sub _FixPriority { SET priority = 0 WHERE biblionumber = ? AND borrowernumber = ? - AND cancellationdate IS NULL AND found ='W' /; my $sth = $dbh->prepare($query); @@ -1057,8 +1102,7 @@ sub _FixPriority { SELECT borrowernumber, reservedate, constrainttype FROM reserves WHERE biblionumber = ? - AND cancellationdate IS NULL - AND ((found <> 'F' and found <> 'W') or found is NULL) + AND ((found <> 'W') or found is NULL) ORDER BY priority ASC /; my $sth = $dbh->prepare($query); @@ -1146,17 +1190,10 @@ sub _Findgroupreserve { AND reserves.borrowernumber = reserveconstraints.borrowernumber AND reserves.reservedate =reserveconstraints.reservedate ) OR reserves.constrainttype='a' ) - AND reserves.cancellationdate is NULL - AND (reserves.found <> 'F' or reserves.found is NULL) /; my $sth = $dbh->prepare($query); $sth->execute( $biblio, $bibitem ); - my @results; - while ( my $data = $sth->fetchrow_hashref ) { - push( @results, $data ); - } - $sth->finish; - return @results; + return $sth->fetchall_arrayref({}); } =back @@ -1167,3 +1204,4 @@ Koha Developement team =cut +1;