[Koha-cvs] koha/C4/Circulation Circ2.pm [dev_week]
Joshua Ferraro
jmf at kados.org
Sun Aug 27 02:20:46 CEST 2006
CVSROOT: /sources/koha
Module name: koha
Branch: dev_week
Changes by: Joshua Ferraro <kados> 06/08/27 00:20:46
Modified files:
C4/Circulation : Circ2.pm
Log message:
Cleanup of Circ2.pm, removal of Date::Manip dependency, turned on
warnings and removed all errors (except uninitialized var warnings)
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/C4/Circulation/Circ2.pm?cvsroot=koha&only_with_tag=dev_week&r1=1.87.2.14.2.5&r2=1.87.2.14.2.6
Patches:
Index: Circ2.pm
===================================================================
RCS file: /sources/koha/koha/C4/Circulation/Circ2.pm,v
retrieving revision 1.87.2.14.2.5
retrieving revision 1.87.2.14.2.6
diff -u -b -r1.87.2.14.2.5 -r1.87.2.14.2.6
--- Circ2.pm 10 Aug 2006 02:10:21 -0000 1.87.2.14.2.5
+++ Circ2.pm 27 Aug 2006 00:20:45 -0000 1.87.2.14.2.6
@@ -3,7 +3,7 @@
package C4::Circulation::Circ2;
-# $Id: Circ2.pm,v 1.87.2.14.2.5 2006/08/10 02:10:21 kados Exp $
+# $Id: Circ2.pm,v 1.87.2.14.2.6 2006/08/27 00:20:45 kados Exp $
#package to deal with Returns
#written 3/11/99 by olwen at katipo.co.nz
@@ -27,17 +27,24 @@
# Suite 330, Boston, MA 02111-1307 USA
use strict;
-# use warnings;
+use warnings; no warnings 'uninitialized';
require Exporter;
use DBI;
use C4::Context;
use C4::Stats;
use C4::Reserves2;
use C4::Koha;
-use C4::Accounts;
-use Date::Manip;
use C4::Biblio;
-#use C4::Calendar::Calendar;
+use C4::Accounts;
+use Date::Calc qw(
+Today
+Today_and_Now
+Add_Delta_YM
+Add_Delta_DHMS
+Date_to_Days
+);
+#use Date::Manip;
+
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
# set the version for version checking
@@ -86,26 +93,12 @@
$sth->execute($itemnum);
return;
}
-sub itemseenbarcode {
- my ($env,$itemnum) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("update items set itemlost=0, datelastseen = now() where items.barcode = ?");
- $sth->execute($itemnum);
- return;
-}
sub listitemsforinventory {
my ($minlocation,$maxlocation,$datelastseen,$offset,$size) = @_;
- my $sth;
my $dbh = C4::Context->dbh;
- if ($datelastseen){
- $sth = $dbh->prepare("select itemnumber,items.biblionumber,items.biblioitemnumber,barcode,itemcallnumber,title,author from items,biblio,biblioitems where items.biblionumber=biblio.biblionumber and biblioitems.biblionumber=biblio.biblionumber and itemcallnumber>= '$minlocation' and itemcallnumber <='$maxlocation' and (datelastseen< '$datelastseen' or datelastseen is null) order by lcsort,Cutterextra");
-
- }else{
- $sth = $dbh->prepare("select itemnumber,items.biblionumber,items.biblioitemnumber,barcode,itemcallnumber,title,author from items,biblio,biblioitems where items.biblionumber=biblio.biblionumber and biblioitems.biblionumber=biblio.biblionumber and itemcallnumber>= '$minlocation' and itemcallnumber <='$maxlocation' order by lcsort,Cutterextra");
-
- }
- $sth->execute();
+ my $sth = $dbh->prepare("select itemnumber,barcode,itemcallnumber,title,author from items,biblio where items.biblionumber=biblio.biblionumber and itemcallnumber>= ? and itemcallnumber <=? and (datelastseen< ? or datelastseen is null) order by itemcallnumber,title");
+ $sth->execute($minlocation,$maxlocation,$datelastseen);
my @results;
while (my $row = $sth->fetchrow_hashref) {
$offset-- if ($offset);
@@ -250,6 +243,12 @@
$sth->finish;
$borrower->{'flags'}=$flags;
$borrower->{'authflags'} = $accessflagshash;
+
+ # find out how long the membership lasts
+ $sth=$dbh->prepare("select enrolmentperiod from categories where categorycode = ?");
+ $sth->execute($borrower->{'categorycode'});
+ my $enrolment = $sth->fetchrow;
+ $borrower->{'enrolmentperiod'} = $enrolment;
return ($borrower); #, $flags, $accessflagshash);
}
@@ -449,7 +448,7 @@
# Perl, though).
sub transferbook {
# transfer book code....
- my ($tbr, $barcode, $ignoreRs,$user) = @_;
+ my ($tbr, $barcode, $ignoreRs) = @_;
my $messages;
my %env;
my $dotransfer = 1;
@@ -490,7 +489,15 @@
}
#actually do the transfer....
if ($dotransfer) {
- dotransfer($iteminformation->{'itemnumber'}, $fbr, $tbr,$user);
+ dotransfer($iteminformation->{'itemnumber'}, $fbr, $tbr);
+ my $dbh= C4::Context->dbh;
+ my ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"items.holdingbranch");
+ my $bibid = MARCfind_MARCbibid_from_oldbiblionumber( $dbh, $iteminformation->{'biblionumber'} );
+ my $marcitem = MARCgetitem($dbh, $bibid, $iteminformation->{'itemnumber'});
+ if ($marcitem->field($tagfield)){
+ $marcitem->field($tagfield)->update($tagsubfield=> $tbr);
+ MARCmoditem($dbh,$marcitem,$bibid,$iteminformation->{'itemnumber'});
+ }
$messages->{'WasTransfered'} = 1;
}
return ($dotransfer, $messages, $iteminformation);
@@ -500,33 +507,20 @@
# FIXME - This is only used in &transferbook. Why bother making it a
# separate function?
sub dotransfer {
- my ($itm, $fbr, $tbr,$user) = @_;
+ my ($itm, $fbr, $tbr) = @_;
my $dbh = C4::Context->dbh;
$itm = $dbh->quote($itm);
$fbr = $dbh->quote($fbr);
$tbr = $dbh->quote($tbr);
- $user = $dbh->quote($user);
#new entry in branchtransfers....
- $dbh->do("INSERT INTO branchtransfers (itemnumber, frombranch, datearrived, tobranch,comments) VALUES ($itm, $fbr, now(), $tbr,$user)");
+ $dbh->do("INSERT INTO branchtransfers (itemnumber, frombranch, datearrived, tobranch)
+ VALUES ($itm, $fbr, now(), $tbr)");
#update holdingbranch in items .....
$dbh->do("UPDATE items set holdingbranch = $tbr WHERE items.itemnumber = $itm");
&itemseen($itm);
- &domarctransfer($dbh,$itm);
return;
}
-
-##New sub to dotransfer in marc tables as well. Not exported -TG 01/10/2005
-sub domarctransfer{
-my ($dbh,$itemnumber) = @_;
-my $sth=$dbh->prepare("select biblionumber,holdingbranch from items where itemnumber=$itemnumber");
- $sth->execute();
-my ($biblionumber,$holdingbranch)=$sth->fetchrow;
-$itemnumber=~s /\'//g;
-&MARCmoditemonefield($dbh,$biblionumber,$itemnumber,'items.holdingbranch',$holdingbranch);
-
-}
-
=head2 canbookbeissued
Check if a book can be issued.
@@ -625,122 +619,13 @@
my $branch_borrower = $borrower->{'branchcode'};
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare('select itemtype from biblioitems where biblionumber = ?');
- $sth->execute($iteminformation->{'biblionumber'});
- my $type = $sth->fetchrow;
- $sth->finish;
- $sth = $dbh->prepare('select * from issuingrules where categorycode = ? and itemtype = ? and branchcode = ?');
- my $sth2 = $dbh->prepare("select COUNT(*) from issues i, biblioitems s, items it where i.borrowernumber = ? and i.returndate is null and i.itemnumber = it.itemnumber and it.biblioitemnumber = s.biblioitemnumber and s.itemtype like ?");
- my $sth3 = $dbh->prepare('select COUNT(*) from issues where borrowernumber = ? and returndate is null');
- my $alreadyissued;
-
- # check the 3 parameters
- #print "content-type: text/plain \n\n";
- #print "$cat_borrower, $type, $branch_borrower";
- $sth->execute($cat_borrower, $type, $branch_borrower);
- my $result = $sth->fetchrow_hashref;
- if (defined($result)) {
- # print "content-type: text/plain \n\n";
- #print "$cat_borrower, $type, $branch_borrower";
- $sth2->execute($borrower->{'borrowernumber'}, "%$type%");
- my $alreadyissued = $sth2->fetchrow;
- # print "***" . $alreadyissued;
- #print "----". $result->{'maxissueqty'};
- if (defined($result->{'maxissueqty'})) {
- return ($alreadyissued,($result->{'maxissueqty'}+0),$cat_borrower, $type, $branch_borrower, $result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
-
- # check for branch=*
- $sth->execute($cat_borrower, $type, "");
- $result = $sth->fetchrow_hashref;
- if (defined($result)) {
- $sth2->execute($borrower->{'borrowernumber'}, "%$type%");
- my $alreadyissued = $sth2->fetchrow;
- if (defined($result->{maxissueqty})) {
- return ($alreadyissued,($result->{maxissueqty}+0),$cat_borrower, $type, "",$result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
-
- # check for itemtype=*
- $sth->execute($cat_borrower, "*", $branch_borrower);
- $result = $sth->fetchrow_hashref;
- if (defined($result)) {
- $sth3->execute($borrower->{'borrowernumber'});
- my $alreadyissued = $sth3->fetchrow;
- if (defined($result->{maxissueqty})) {
- return ($alreadyissued,($result->{maxissueqty}+0),$cat_borrower, "*", $branch_borrower,$result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
-
- #check for borrowertype=*
- $sth->execute("*", $type, $branch_borrower);
- $result = $sth->fetchrow_hashref;
- if (defined($result)) {
- $sth2->execute($borrower->{'borrowernumber'}, "%$type%");
- my $alreadyissued = $sth2->fetchrow;
- if (defined($result->{maxissueqty})) {
- return ($alreadyissued,($result->{maxissueqty}+0),"*", $type, $branch_borrower,$result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
-
- #check for borrowertype=*;itemtype=*
- $sth->execute("*", "*", $branch_borrower);
- $result = $sth->fetchrow_hashref;
- if (defined($result)) {
- $sth3->execute($borrower->{'borrowernumber'});
- my $alreadyissued = $sth3->fetchrow;
- if (defined($result->{maxissueqty})) {
- return ($alreadyissued,($result->{maxissueqty}+0),"*", "*", $branch_borrower,$result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
-
- #check for borrowertype=*;branch=""
- $sth->execute("*", $type, "");
- $result = $sth->fetchrow_hashref;
- if (defined($result) && $result->{maxissueqty} ge 0) {
- $sth2->execute($borrower->{'borrowernumber'}, "%$type%");
- my $alreadyissued = $sth2->fetchrow;
- if (defined($result->{maxissueqty})) {
- return ($alreadyissued,($result->{maxissueqty}+0),"*", $type, "",$result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
-
- $sth->execute($cat_borrower, "*", "");
- $result = $sth->fetchrow_hashref;
- if (defined($result)) {
- $sth2->execute($borrower->{'borrowernumber'}, "%$type%");
- my $alreadyissued = $sth2->fetchrow;
- if (defined($result->{maxissueqty})) {
- return ($alreadyissued,($result->{maxissueqty}+0),$cat_borrower, "*", "",$result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
-
- $sth->execute("*", "*", "");
- $result = $sth->fetchrow_hashref;
- if (defined($result)) {
- $sth3->execute($borrower->{'borrowernumber'});
- my $alreadyissued = $sth3->fetchrow;
- if (defined($result->{maxissueqty})) {
- return ($alreadyissued,($result->{maxissueqty}+0),"*", "*", "",$result->{'issuelength'}) if ($result->{'maxissueqty'} <= $alreadyissued);
- }
- }
- return (undef, undef, undef, undef, undef, undef);
-}
-
-sub TooMany2 ($$){
- my $borrower = shift;
- my $iteminformation = shift;
- my $cat_borrower = $borrower->{'categorycode'};
- my $branch_borrower = $borrower->{'branchcode'};
- my $dbh = C4::Context->dbh;
-
my $sth = $dbh->prepare('select itemtype from biblioitems where biblionumber = ?');
$sth->execute($iteminformation->{'biblionumber'});
my $type = $sth->fetchrow;
$sth = $dbh->prepare('select * from issuingrules where categorycode = ? and itemtype = ? and branchcode = ?');
- my $sth2 = $dbh->prepare("select COUNT(*) from issues i, biblioitems s where i.borrowernumber = ? and i.returndate is null and i.itemnumber = s.biblioitemnumber and s.itemtype like ?");
+# my $sth2 = $dbh->prepare("select COUNT(*) from issues i, biblioitems s where i.borrowernumber = ? and i.returndate is null and i.itemnumber = s.biblioitemnumber and s.itemtype like ?");
+ my $sth2 = $dbh->prepare("select COUNT(*) from issues i, biblioitems s1, items s2 where i.borrowernumber = ? and i.returndate is null and i.itemnumber = s2.itemnumber and s1.itemtype like ? and s1.biblioitemnumber = s2.biblioitemnumber");
my $sth3 = $dbh->prepare('select COUNT(*) from issues where borrowernumber = ? and returndate is null');
my $alreadyissued;
# check the 3 parameters
@@ -766,7 +651,7 @@
if (defined($result)) {
$sth3->execute($borrower->{'borrowernumber'});
my ($alreadyissued) = $sth3->fetchrow;
-# warn "HERE : $alreadyissued / ($result->{maxissueqty} for $borrower->{'borrowernumber'}";
+ warn "HERE : $alreadyissued / ($result->{maxissueqty} for $borrower->{'borrowernumber'}";
return ("c $alreadyissued / ".($result->{maxissueqty}+0)) if ($result->{'maxissueqty'} <= $alreadyissued);
}
#check for borrowertype=*
@@ -788,7 +673,7 @@
$sth->execute("*", $type, "");
$result = $sth->fetchrow_hashref;
- if (defined($result) && $result->{maxissueqty}>=0) {
+ if (defined($result) && $result->{maxissueqty} ge 0) {
$sth2->execute($borrower->{'borrowernumber'}, "%$type%");
my $alreadyissued = $sth2->fetchrow;
return ("f $alreadyissued / ".($result->{maxissueqty}+0)) if ($result->{'maxissueqty'} <= $alreadyissued);
@@ -837,7 +722,10 @@
if ($borrower->{flags}->{'DBARRED'}) {
$issuingimpossible{DEBARRED} = 1;
}
- if (DATE_diff($borrower->{expiry},'CURRENT_DATE')<0) {
+
+ if (Date_to_Days(Today()) > Date_to_Days(split /-/, $borrower->{'expiry'})) {
+ #
+ #if (&Date_Cmp(&ParseDate($borrower->{expiry}),&ParseDate("today"))<0) {
$issuingimpossible{EXPIRED} = 1;
}
#
@@ -854,20 +742,8 @@
#
# JB34 CHECKS IF BORROWERS DONT HAVE ISSUE TOO MANY BOOKS
#
-# my $toomany = TooMany($borrower, $iteminformation);
-
-# $needsconfirmation{TOO_MANY} = $toomany if $toomany;
-my ($already_issues,
- $max_issues,
- $categorycode_rule,
- $itemtype_rule,
- $branchcode_rule,
- $issue_lenght) = TooMany($borrower, $iteminformation);
- $needsconfirmation{TOO_MANY} = $already_issues." / ".$max_issues if defined($already_issues);
- $needsconfirmation{TOO_MANY_CATEGORYCODE} = $categorycode_rule if defined($already_issues);
- $needsconfirmation{TOO_MANY_ITEMTYPE} = $itemtype_rule if defined($already_issues);
- $needsconfirmation{TOO_MANY_BRANCHCODE} = $branchcode_rule if defined($already_issues);
-
+ my $toomany = TooMany($borrower, $iteminformation);
+ $needsconfirmation{TOO_MANY} = $toomany if $toomany;
#
# ITEM CHECKING
@@ -887,9 +763,14 @@
if ($iteminformation->{'restricted'} == 1) {
$issuingimpossible{RESTRICTED} = 1;
}
- if ($iteminformation->{'stack'} eq 'Res') {
- $issuingimpossible{IN_RESERVE} = 1;
+ if (C4::Context->preference("IndependantBranches")){
+ my $userenv = C4::Context->userenv;
+ if (($userenv)&&($userenv->{flags} != 1)){
+ $issuingimpossible{NOTSAMEBRANCH} = 1 if ($iteminformation->{'holdingbranch'} ne $userenv->{branch} ) ;
}
+ }
+
+
#
@@ -903,10 +784,7 @@
if ($renewstatus == 0) { # no more renewals allowed
$issuingimpossible{NO_MORE_RENEWALS} = 1;
} else {
-
$needsconfirmation{RENEW_ISSUE} = 1;
-
-
}
} elsif ($currentborrower) {
# issued to someone else
@@ -914,7 +792,7 @@
# warn "=>.$currborinfo->{'firstname'} $currborinfo->{'surname'} ($currborinfo->{'cardnumber'})";
$needsconfirmation{ISSUED_TO_ANOTHER} = "$currborinfo->{'reservedate'} : $currborinfo->{'firstname'} $currborinfo->{'surname'} ($currborinfo->{'cardnumber'})";
}
-# See if the item is on RESERVE
+# See if the item is on reserve.
my ($restype, $res) = CheckReserves($iteminformation->{'itemnumber'});
if ($restype) {
my $resbor = $res->{'borrowernumber'};
@@ -925,7 +803,7 @@
my $branches = getbranches();
my $branchname = $branches->{$res->{'branchcode'}}->{'branchname'};
$needsconfirmation{RESERVE_WAITING} = "$resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'}, $branchname)";
- CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
+ # CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'}); Doesn't belong in a checking subroutine.
} elsif ($restype eq "Reserved") {
# The item is on reserve for someone else.
my ($resborrower, $flags)=getpatroninformation($env, $resbor,0);
@@ -961,8 +839,6 @@
sub issuebook {
my ($env,$borrower,$barcode,$date,$cancelreserve) = @_;
my $dbh = C4::Context->dbh;
- #warn "tring to issue";
- my $error;
# my ($borrower, $flags) = &getpatroninformation($env, $borrowernumber, 0);
my $iteminformation = getiteminformation($env, 0, $barcode);
# warn "B : ".$borrower->{borrowernumber}." / I : ".$iteminformation->{'itemnumber'};
@@ -977,11 +853,7 @@
$iteminformation->{'charge'} = $charge;
}
&UpdateStats($env,$env->{'branchcode'},'renew',$charge,'',$iteminformation->{'itemnumber'},$iteminformation->{'itemtype'},$borrower->{'borrowernumber'});
- $error=renewstatus($env, $borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'});
- renewbook($env, $borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'}) if ($error>1);
-
-#warn "renew : ".$borrower->{borrowernumber}." / I : ".$iteminformation->{'itemnumber'};
-
+ renewbook($env, $borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'});
} else {
#
# NOT a renewal
@@ -990,28 +862,27 @@
# This book is currently on loan, but not to the person
# who wants to borrow it now. mark it returned before issuing to the new borrower
returnbook($iteminformation->{'barcode'}, $env->{'branchcode'});
-#warn "return : ".$borrower->{borrowernumber}." / I : ".$iteminformation->{'itemnumber'};
-
}
# See if the item is on reserve.
my ($restype, $res) = CheckReserves($iteminformation->{'itemnumber'});
-#warn "$restype,$res";
if ($restype) {
my $resbor = $res->{'borrowernumber'};
if ($resbor eq $borrower->{'borrowernumber'}) {
# The item is on reserve to the current patron
FillReserve($res);
-# warn "FillReserve";
+ warn "FillReserve";
} elsif ($restype eq "Waiting") {
-# warn "Waiting";
+ warn "Waiting";
# The item is on reserve and waiting, but has been
# reserved by some other patron.
my ($resborrower, $flags)=getpatroninformation($env, $resbor,0);
my $branches = getbranches();
my $branchname = $branches->{$res->{'branchcode'}}->{'branchname'};
+ if ($cancelreserve){
CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
+ }
} elsif ($restype eq "Reserved") {
-# warn "Reserved";
+ warn "Reserved";
# The item is on reserve for someone else.
my ($resborrower, $flags)=getpatroninformation($env, $resbor,0);
my $branches = getbranches();
@@ -1020,39 +891,37 @@
# cancel reserves on this item
CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
# also cancel reserve on biblio related to this item
- my $st_Fbiblio = $dbh->prepare("select biblionumber from items where itemnumber=?");
- $st_Fbiblio->execute($res->{'itemnumber'});
- my $biblionumber = $st_Fbiblio->fetchrow;
- CancelReserve($biblionumber,0,$res->{'borrowernumber'});
-# warn "CancelReserve $res->{'itemnumber'}, $res->{'borrowernumber'}";
+ #my $st_Fbiblio = $dbh->prepare("select biblionumber from items where itemnumber=?");
+ #$st_Fbiblio->execute($res->{'itemnumber'});
+ #my $biblionumber = $st_Fbiblio->fetchrow;
+ #CancelReserve($biblionumber,0,$res->{'borrowernumber'});
+ #warn "CancelReserve $res->{'itemnumber'}, $res->{'borrowernumber'}";
} else {
# my $tobrcd = ReserveWaiting($res->{'itemnumber'}, $res->{'borrowernumber'});
# transferbook($tobrcd,$barcode, 1);
-# warn "transferbook";
+ warn "transferbook";
}
}
}
# Record in the database the fact that the book was issued.
- my $sth=$dbh->prepare("insert into issues (borrowernumber, itemnumber, date_due, branchcode,issue_date) values (?,?,?,?,NOW())");
- my @datearr = localtime();
-# my $dateduef = (1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
+ my $sth=$dbh->prepare("insert into issues (borrowernumber, itemnumber, date_due, branchcode) values (?,?,?,?)");
my $loanlength = getLoanLength($borrower->{'categorycode'},$iteminformation->{'itemtype'},$borrower->{'branchcode'});
- $loanlength = getLoanLength($borrower->{'categorycode'},$iteminformation->{'itemtype'},$borrower->{'branchcode'});
my $datedue=time+($loanlength)*86400;
- @datearr = localtime($datedue);
+ my @datearr = localtime($datedue);
my $dateduef = (1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
-#warn "issue : ".$borrower->{borrowernumber}." / I : ".$iteminformation->{'itemnumber'};
-
if ($date) {
$dateduef=$date;
}
+ # if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
+ if (C4::Context->preference('ReturnBeforeExpiry') && $dateduef gt $borrower->{expiry}) {
+ $dateduef=$borrower->{expiry};
+ }
$sth->execute($borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'}, $dateduef, $env->{'branchcode'});
$sth->finish;
$iteminformation->{'issues'}++;
- $sth=$dbh->prepare("update items set issues=?, onloan=? where itemnumber=?");
- $sth->execute($iteminformation->{'issues'},$dateduef,$iteminformation->{'itemnumber'});
+ $sth=$dbh->prepare("update items set issues=? where itemnumber=?");
+ $sth->execute($iteminformation->{'issues'},$iteminformation->{'itemnumber'});
$sth->finish;
- &MARCmoditemonefield($dbh,$iteminformation->{'biblionumber'},$iteminformation->{'itemnumber'},'items.onloan',$dateduef);
&itemseen($iteminformation->{'itemnumber'});
# If it costs to borrow this book, charge it to the patron's account.
my ($charge,$itemtype)=calc_charges($env, $iteminformation->{'itemnumber'}, $borrower->{'borrowernumber'});
@@ -1063,7 +932,6 @@
# Record the fact that this book was issued.
&UpdateStats($env,$env->{'branchcode'},'issue',$charge,'',$iteminformation->{'itemnumber'},$iteminformation->{'itemtype'},$borrower->{'borrowernumber'});
}
-return($error);
}
=head2 getLoanLength
@@ -1214,10 +1082,6 @@
my $sth = $dbh->prepare("update issues set returndate = now() where (borrowernumber = ?) and (itemnumber = ?) and (returndate is null)");
$sth->execute($borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'});
$messages->{'WasReturned'} = 1; # FIXME is the "= 1" right?
- $sth=$dbh->prepare("update items set onloan=NULL where itemnumber=?");
- $sth->execute($iteminformation->{'itemnumber'});
- $sth->finish;
- &MARCmoditemonefield($dbh,$iteminformation->{'biblionumber'},$iteminformation->{'itemnumber'},'items.onloan',"0000-00-00");
}
itemseen($iteminformation->{'itemnumber'});
($borrower) = getpatroninformation(\%env, $currentborrower, 0);
@@ -1285,7 +1149,7 @@
$usth->execute($data->{'borrowernumber'},$itm,$acctno);
$usth->finish;
#check if any credit is left if so writeoff other accounts
- my $nextaccntno = _getnextacctno(\%env,$data->{'borrowernumber'},$dbh);
+ my $nextaccntno = getnextacctno(\%env,$data->{'borrowernumber'},$dbh);
if ($amountleft < 0){
$amountleft*=-1;
}
@@ -1361,7 +1225,7 @@
$sth->execute($brn,$itm);
# alter fine to show that the book has been returned
if (my $data = $sth->fetchrow_hashref) {
- my $usth=$dbh->prepare("update accountlines set accounttype='F' where (borrowernumber = ?) and (itemnumber = ?) and (accountno = ?)");
+ my $usth=$dbh->prepare("update accountlines set accounttype='F' where (borrowernumber = ?) and (itemnumber = ?) and (acccountno = ?)");
$usth->execute($brn,$itm,$data->{'accountno'});
$usth->finish();
}
@@ -1696,7 +1560,7 @@
my $counter = 0;
while (my $data = $sth->fetchrow_hashref) {
$data->{'dewey'} =~ s/0*$//;
- ($data->{'dewey'} == 0) && ($data->{'dewey'} = '');
+ #($data->{'dewey'} == 0) && ($data->{'dewey'} = '');
# FIXME - The Dewey code is a string, not a number.
# FIXME - Use POSIX::strftime to get a text version of today's
# date. That's what it's for.
@@ -1766,16 +1630,12 @@
sub renewstatus {
# check renewal status
my ($env,$bornum,$itemno)=@_;
- my $dbh=C4::Context->dbh;
+ my $dbh = C4::Context->dbh;
my $renews = 1;
-
- my $renewokay; ##
+ my $renewokay = 0;
# Look in the issues table for this item, lent to this borrower,
# and not yet returned.
-my $borrower=getpatroninformation($dbh,$bornum,undef);
-if ($borrower->{'categorycode'} eq 'F' ||$borrower->{'categorycode'} eq 'P'){
-$renewokay = 1;
-}
+
# FIXME - I think this function could be redone to use only one SQL call.
my $sth1 = $dbh->prepare("select * from issues
where (borrowernumber = ?)
@@ -1798,44 +1658,20 @@
$renews = $data2->{'renewalsallowed'};
}
if ($renews > $data1->{'renewals'}) {
- $renewokay= 1;
- }else{
- $renewokay=3;
+ $renewokay = 1;
}
$sth2->finish;
my ($resfound, $resrec) = CheckReserves($itemno);
if ($resfound) {
- $renewokay=4;
+ $renewokay = 0;
}
+ ($resfound, $resrec) = CheckReserves($itemno);
+ if ($resfound) {
+ $renewokay = 0;
}
- $sth1->finish;
-## Try to find whether book can be renewed at this date
- my $loanlength;
-
- my $allowRenewalsBefore = C4::Context->preference("allowRenewalsBefore");
- my @nowarr = localtime(time);
- my $now = (1900+$nowarr[5])."-".($nowarr[4]+1)."-".$nowarr[3];
-
- # Find the issues record for this book### Use the items table -->quicker
- my $sth=$dbh->prepare("select onloan from items where itemnumber=? ");
- $sth->execute($itemno);
- my $issuedata=$sth->fetchrow;
- $sth->finish;
-
-#calculates the date on the we are allowed to renew the item
- $sth = $dbh->prepare("SELECT (DATE_SUB( ?, INTERVAL ? DAY))");
- $sth->execute($issuedata, $allowRenewalsBefore);
- my $startdate = $sth->fetchrow;
-
- $sth->finish;
- $sth = $dbh->prepare("SELECT DATEDIFF(CURRENT_DATE,?)");
- $sth->execute($startdate);
- my $difference = $sth->fetchrow;
- $sth->finish;
- if ($difference < 0) {
- $renewokay=2;
}
+ $sth1->finish;
return($renewokay);
}
@@ -1864,87 +1700,52 @@
=cut
sub renewbook {
- my ($env,$bornum,$itemno,$datedue)=@_;
# mark book as renewed
+ my ($env,$bornum,$itemno,$datedue)=@_;
+ my $dbh = C4::Context->dbh;
- my $loanlength;
-
-my $dbh=C4::Context->dbh;
-
-
-my $iteminformation = getiteminformation($env, $itemno,0);
-
-# Find the issues record for this book### Use the items table -->quicker
- my $sth=$dbh->prepare("select onloan from items where itemnumber=? ");
- $sth->execute($itemno);
- my $issuedata=$sth->fetchrow;
- $sth->finish;
-
-
-## We find a new datedue either from today or from the due_date of the book- T.G
-
-if ($datedue eq "" ) {
-
+ # If the due date wasn't specified, calculate it by adding the
+ # book's loan length to today's date.
+ if ($datedue eq "" ) {
+ #debug_msg($env, "getting date");
+ my $iteminformation = getiteminformation($env, $itemno,0);
my $borrower = getpatroninformation($env,$bornum,0);
- $loanlength = getLoanLength($borrower->{'categorycode'},$iteminformation->{'itemtype'},$borrower->{'branchcode'});
-my @nowarr = localtime(time);
- my $now = (1900+$nowarr[5])."-".($nowarr[4]+1)."-".$nowarr[3];
- if ($issuedata<=$now){
-
-
my $loanlength = getLoanLength($borrower->{'categorycode'},$iteminformation->{'itemtype'},$borrower->{'branchcode'});
- my $datedue=time+($loanlength)*86400;
- my @datearr = localtime($datedue);
- my $dateduef = (1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
-
- }else{
-
- my $loanlength = getLoanLength($borrower->{'categorycode'},$iteminformation->{'itemtype'},$borrower->{'branchcode'});
- my $datedue=time+($loanlength)*86400;
- my @datearr = localtime($datedue);
- my $dateduef = (1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
-
+ my ($due_year, $due_month, $due_day) = Add_Delta_DHMS(Today_and_Now(), $loanlength,0,0,0);
+ $datedue = "$due_year-$due_month-$due_day";
+ #$datedue = UnixDate(DateCalc("today","$loanlength days"),"%Y-%m-%d");
}
-
-
-## Only update the renewal if we have a new $duedate -T.G
+ # Find the issues record for this book
+ my $sth=$dbh->prepare("select * from issues where borrowernumber=? and itemnumber=? and returndate is null");
+ $sth->execute($bornum,$itemno);
+ my $issuedata=$sth->fetchrow_hashref;
+ $sth->finish;
# Update the issues record to have the new due date, and a new count
# of how many times it has been renewed.
- #my $renews = $issuedata->{'renewals'} +1;
- $sth=$dbh->prepare("update issues set date_due = ?, renewals = renewals+1
+ my $renews = $issuedata->{'renewals'} +1;
+ $sth=$dbh->prepare("update issues set date_due = ?, renewals = ?
where borrowernumber=? and itemnumber=? and returndate is null");
- $sth->execute($datedue,$bornum,$itemno);
+ $sth->execute($datedue,$renews,$bornum,$itemno);
$sth->finish;
- ## Update items and marc record with new date -T.G
- my $iteminformation = getiteminformation($env, $itemno,0);
- $sth=$dbh->prepare("update items set issues=?, onloan=? where itemnumber=?");
- $sth->execute($iteminformation->{'issues'}+1,$datedue,$itemno);
- $sth->finish;
- &MARCmoditemonefield($dbh,$iteminformation->{'biblionumber'},$iteminformation->{'itemnumber'},'items.onloan',$datedue);
-
# Log the renewal
UpdateStats($env,$env->{'branchcode'},'renew','','',$itemno);
# Charge a new rental fee, if applicable?
my ($charge,$type)=calc_charges($env, $itemno, $bornum);
if ($charge > 0){
- my $accountno=_getnextacctno($env,$bornum,$dbh);
+ my $accountno=getnextacctno($env,$bornum,$dbh);
my $item=getiteminformation($env, $itemno);
$sth=$dbh->prepare("Insert into accountlines (borrowernumber,accountno,date,amount,description,accounttype,amountoutstanding,itemnumber)
values (?,?,now(),?,?,?,?,?)");
$sth->execute($bornum,$accountno,$charge,"Renewal of Rental Item $item->{'title'} $item->{'barcode'}",'Rent',$charge,$itemno);
$sth->finish;
# print $account;
- }# end of rental charge
-
-
}
-
-
+ # return();
}
@@ -1994,7 +1795,7 @@
sub createcharge {
#Stolen from Issues.pm
my ($env,$dbh,$itemno,$bornum,$charge) = @_;
- my $nextaccntno = _getnextacctno($env,$bornum,$dbh);
+ my $nextaccntno = getnextacctno($env,$bornum,$dbh);
my $sth = $dbh->prepare(<<EOT);
INSERT INTO accountlines
(borrowernumber, itemnumber, accountno,
@@ -2009,18 +1810,18 @@
}
-sub _getnextacctno {
+#sub getnextacctno {
# Stolen from Accounts.pm
- my ($env,$bornumber,$dbh)=@_;
- my $nextaccntno = 1;
- my $sth = $dbh->prepare("select * from accountlines where (borrowernumber = ?) order by accountno desc");
- $sth->execute($bornumber);
- if (my $accdata=$sth->fetchrow_hashref){
- $nextaccntno = $accdata->{'accountno'} + 1;
- }
- $sth->finish;
- return($nextaccntno);
-}
+# my ($env,$bornumber,$dbh)=@_;
+# my $nextaccntno = 1;
+# my $sth = $dbh->prepare("select * from accountlines where (borrowernumber = ?) order by accountno desc");
+# $sth->execute($bornumber);
+# if (my $accdata=$sth->fetchrow_hashref){
+# $nextaccntno = $accdata->{'accountno'} + 1;
+# }
+# $sth->finish;
+# return($nextaccntno);
+#}
=item find_reserves
@@ -2124,15 +1925,6 @@
return ($date, $invalidduedate);
}
-sub DATE_diff {
-my ($date1,$date2)=@_;
-my $dbh=C4::Context->dbh;
-my $sth = $dbh->prepare("SELECT DATEDIFF(?,?)");
- $sth->execute($date1,$date2);
- my $difference = $sth->fetchrow;
- $sth->finish;
-return $difference;
-}
1;
__END__
More information about the Koha-cvs
mailing list