use C4::Reserves;
use C4::Koha;
use C4::Biblio;
+use C4::Items;
use C4::Members;
use C4::Dates;
use Date::Calc qw(
use Data::Dumper;
-our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,%EXPORT_TAGS);
-
-# set the version for version checking
-$VERSION = 3.00;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+
+BEGIN {
+ # set the version for version checking
+ $VERSION = 3.01;
+ @ISA = qw(Exporter);
+
+ # FIXME subs that should probably be elsewhere
+ push @EXPORT, qw(
+ &FixOverduesOnReturn
+ &barcodedecode
+ );
+
+ # subs to deal with issuing a book
+ push @EXPORT, qw(
+ &CanBookBeIssued
+ &CanBookBeRenewed
+ &AddIssue
+ &AddRenewal
+ &GetRenewCount
+ &GetItemIssue
+ &GetItemIssues
+ &GetBorrowerIssues
+ &GetIssuingCharges
+ &GetBiblioIssues
+ &AnonymiseIssueHistory
+ );
+
+ # subs to deal with returns
+ push @EXPORT, qw(
+ &AddReturn
+ );
+
+ # subs to deal with transfers
+ push @EXPORT, qw(
+ &transferbook
+ &GetTransfers
+ &GetTransfersFromTo
+ &updateWrongTransfer
+ &DeleteTransfer
+ );
+}
=head1 NAME
=head1 FUNCTIONS
-=cut
-
-@ISA = qw(Exporter);
-
-# FIXME subs that should probably be elsewhere
-push @EXPORT, qw(
- &FixOverduesOnReturn
- &cuecatbarcodedecode
-);
-
-# subs to deal with issuing a book
-push @EXPORT, qw(
- &CanBookBeIssued
- &CanBookBeRenewed
- &AddIssue
- &AddRenewal
- &GetRenewCount
- &GetItemIssue
- &GetItemIssues
- &GetBorrowerIssues
- &GetIssuingCharges
- &GetBiblioIssues
- &AnonymiseIssueHistory
-);
-# subs to deal with returns
-push @EXPORT, qw(
- &AddReturn
-);
-
-# subs to deal with transfers
-push @EXPORT, qw(
- &transferbook
- &GetTransfers
- &GetTransfersFromTo
- &updateWrongTransfer
- &DeleteTransfer
-);
-
-# FIXME - At least, I'm pretty sure this is for decoding CueCat stuff.
-# FIXME From Paul : i don't understand what this sub does & why it has to be called on every circ. Speak of this with chris maybe ?
-
=head2 decode
=head3 $str = &decode($chunk);
=over 4
-=item Decodes a segment of a string emitted by a CueCat barcode scanner and
-returns it.
+=item Generic filter function for barcode string.
=back
=cut
-sub cuecatbarcodedecode {
+# FIXME From Paul : i don't understand what this sub does & why it has to be called on every circ. Speak of this with chris maybe ?
+# FIXME -- the &decode fcn below should be wrapped into this one.
+
+sub barcodedecode {
my ($barcode) = @_;
- chomp($barcode);
- my @fields = split( /\./, $barcode );
- my @results = map( decode($_), @fields[ 1 .. $#fields ] );
- if ( $#results == 2 ) {
- return $results[2];
- }
- else {
- return $barcode;
- }
+ my $filter = C4::Context->preference('itemBarcodeInputFilter');
+ if($filter eq 'whitespace') {
+ $barcode =~ s/\s//g;
+ return $barcode;
+ } elsif($filter eq 'cuecat') {
+ chomp($barcode);
+ my @fields = split( /\./, $barcode );
+ my @results = map( decode($_), @fields[ 1 .. $#fields ] );
+ if ( $#results == 2 ) {
+ return $results[2];
+ }
+ else {
+ return $barcode;
+ }
+ } elsif($filter eq 'T-prefix') {
+ my $num = ( $barcode =~ /^[Tt] /) ? substr($barcode,2) + 0 : $barcode;
+ return sprintf( "T%07d",$num);
+ }
}
=head2 decode
my $biblionumber = shift;
my $item = shift;
my $cat_borrower = $borrower->{'categorycode'};
- my $branch_borrower = $borrower->{'branchcode'};
my $dbh = C4::Context->dbh;
-
- my $branch_issuer = C4::Context->userenv->{'branchcode'};
- # TODO : specify issuer or borrower for circrule.
+ my $branch;
+ # Get which branchcode we need
+ if (C4::Context->preference('CircControl') eq 'PickupLibary'){
+ $branch = C4::Context->userenv->{'branch'};
+ }
+ elsif (C4::Context->preference('CircControl') eq 'PatronLibary'){
+ $branch = $borrower->{'branchcode'};
+ }
+ else {
+ # items home library
+ $branch = $item->{'homebranch'};
+ }
my $type = (C4::Context->preference('item-level_itypes'))
? $item->{'itype'} # item-level
: $item->{'itemtype'}; # biblio-level
my $alreadyissued;
# check the 3 parameters (branch / itemtype / category code
- $sth->execute( $cat_borrower, $type, $branch_borrower );
+ $sth->execute( $cat_borrower, $type, $branch );
my $result = $sth->fetchrow_hashref;
-# warn "$cat_borrower, $type, $branch_borrower = ".Data::Dumper::Dumper($result);
+# warn "$cat_borrower, $type, $branch = ".Data::Dumper::Dumper($result);
if ( $result->{maxissueqty} ne '' ) {
# warn "checking on everything set";
return ( "$alreadyissued / ".( $result->{maxissueqty} + 0 )." (rule on branch/category/itemtype failed)" );
}
# now checking for total
- $sth->execute( $cat_borrower, '', $branch_borrower );
+ $sth->execute( $cat_borrower, '*', $branch );
my $result = $sth->fetchrow_hashref;
- if ( $result->{maxissueqty} ne '*' ) {
+ if ( $result->{maxissueqty} ne '' ) {
$sth2->execute( $borrower->{'borrowernumber'}, $type );
my $alreadyissued = $sth2->fetchrow;
if ( $result->{'maxissueqty'} <= $alreadyissued ) {
}
# check the 2 parameters (branch / itemtype / default categorycode
- $sth->execute( '*', $type, $branch_borrower );
- my $result = $sth->fetchrow_hashref;
-# warn "*, $type, $branch_borrower = ".Data::Dumper::Dumper($result);
+ $sth->execute( '*', $type, $branch );
+ $result = $sth->fetchrow_hashref;
+# warn "*, $type, $branch = ".Data::Dumper::Dumper($result);
if ( $result->{maxissueqty} ne '' ) {
# warn "checking on 2 parameters (default categorycode)";
return ( "$alreadyissued / ".( $result->{maxissueqty} + 0 )." (rule on branch / default category / itemtype failed)" );
}
# now checking for total
- $sth->execute( '*', '*', $branch_borrower );
+ $sth->execute( '*', '*', $branch );
my $result = $sth->fetchrow_hashref;
if ( $result->{maxissueqty} ne '' ) {
$sth2->execute( $borrower->{'borrowernumber'}, $type );
# check the 1 parameters (default branch / itemtype / categorycode
$sth->execute( $cat_borrower, $type, '*' );
- my $result = $sth->fetchrow_hashref;
+ $result = $sth->fetchrow_hashref;
# warn "$cat_borrower, $type, * = ".Data::Dumper::Dumper($result);
if ( $result->{maxissueqty} ne '' ) {
# check the 0 parameters (default branch / itemtype / default categorycode
$sth->execute( '*', $type, '*' );
- my $result = $sth->fetchrow_hashref;
+ $result = $sth->fetchrow_hashref;
# warn "*, $type, * = ".Data::Dumper::Dumper($result);
if ( $result->{maxissueqty} ne '' ) {
}
# now checking for total
$sth->execute( '*', '*', '*' );
- my $result = $sth->fetchrow_hashref;
+ $result = $sth->fetchrow_hashref;
if ( $result->{maxissueqty} ne '' ) {
warn "checking total";
$sth2->execute( $borrower->{'borrowernumber'}, $type );
sub itemissues {
my ( $bibitem, $biblio ) = @_;
my $dbh = C4::Context->dbh;
-
- # FIXME - If this function die()s, the script will abort, and the
- # user won't get anything; depending on how far the script has
- # gotten, the user might get a blank page. It would be much better
- # to at least print an error message. The easiest way to do this
- # is to set $SIG{__DIE__}.
my $sth =
$dbh->prepare("Select * from items where items.biblioitemnumber = ?")
|| die $dbh->errstr;
$data->{'borrower'} = $data2->{'borrowernumber'};
}
else {
- if ( $data->{'wthdrawn'} eq '1' ) {
- $data->{'date_due'} = 'Cancelled';
- }
- else {
- $data->{'date_due'} = 'Available';
- } # else
- } # else
+ $data->{'date_due'} = ($data->{'wthdrawn'} eq '1') ? 'Cancelled' : 'Available';
+ }
$sth2->finish;
=head2 CanBookBeIssued
-$issuingimpossible, $needsconfirmation =
+( $issuingimpossible, $needsconfirmation ) =
CanBookBeIssued( $borrower, $barcode, $duedatespec, $inprocess );
C<$duedatespec> is a C4::Dates object.
C<$issuingimpossible> and C<$needsconfirmation> are some hashref.
my $userenv = C4::Context->userenv;
if ( ($userenv) && ( $userenv->{flags} != 1 ) ) {
$issuingimpossible{NOTSAMEBRANCH} = 1
- if ( $item->{C4::Context->preference("HomeOrHoldingbranch")} ne $userenv->{branch} );
+ if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} );
}
}
# Already issued to current borrower. Ask whether the loan should
# be renewed.
- my ($CanBookBeRenewed) = CanBookBeRenewed(
+ my ($CanBookBeRenewed,$renewerror) = CanBookBeRenewed(
$borrower->{'borrowernumber'},
$item->{'itemnumber'}
);
# See if the item is on reserve.
my ( $restype, $res ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
if ($restype) {
- my $resbor = $res->{'borrowernumber'};
+ my $resbor = $res->{'borrowernumber'};
+ my ( $resborrower, $flags ) = GetMemberDetails( $resbor, 0 );
+ my $branches = GetBranches();
+ my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'};
if ( $resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting" )
{
-
# The item is on reserve and waiting, but has been
# reserved by some other patron.
- my ( $resborrower, $flags ) =
- GetMemberDetails( $resbor, 0 );
- 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'}); Doesn't belong in a checking subroutine.
}
elsif ( $restype eq "Reserved" ) {
-
# The item is on reserve for someone else.
- my ( $resborrower, $flags ) =
- GetMemberDetails( $resbor, 0 );
- my $branches = GetBranches();
- my $branchname =
- $branches->{ $res->{'branchcode'} }->{'branchname'};
$needsconfirmation{RESERVED} =
"$res->{'reservedate'} : $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'})";
}
}
if ( C4::Context->preference("LibraryName") eq "Horowhenua Library Trust" ) {
if ( $borrower->{'categorycode'} eq 'W' ) {
- my %issuingimpossible;
- return ( \%issuingimpossible, \%needsconfirmation );
- } else {
- return ( \%issuingimpossible, \%needsconfirmation );
+ my %emptyhash;
+ return ( \%emptyhash, \%needsconfirmation );
}
- } else {
- return ( \%issuingimpossible, \%needsconfirmation );
- }
+ }
+ return ( \%issuingimpossible, \%needsconfirmation );
}
=head2 AddIssue
my $dbh = C4::Context->dbh;
my $barcodecheck=CheckValidBarcode($barcode);
if ($borrower and $barcode and $barcodecheck ne '0'){
-# my ($borrower, $flags) = &GetMemberDetails($borrowernumber, 0);
# find which item we issue
my $item = GetItem('', $barcode);
my $datedue;
+ my $branch;
+ # Get which branchcode we need
+ if (C4::Context->preference('CircControl') eq 'PickupLibary'){
+ $branch = C4::Context->userenv->{'branchcode'};
+ }
+ elsif (C4::Context->preference('CircControl') eq 'PatronLibary'){
+ $branch = $borrower->{'branchcode'};
+ }
+ else {
+ # items home library
+ $branch = $item->{'homebranch'};
+ }
+
# get actual issuing if there is one
my $actualissue = GetItemIssue( $item->{itemnumber});
AddRenewal(
$borrower->{'borrowernumber'},
$item->{'itemnumber'},
- C4::Context->userenv->{'branch'},
+ $branch,
$date
);
}
else {
# it's NOT a renewal
- if ( $actualissue->{borrowernumber}) {
- # 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
- AddReturn(
- $item->{'barcode'},
- C4::Context->userenv->{'branch'}
- );
- }
-
- # See if the item is on reserve.
- my ( $restype, $res ) =
- C4::Reserves::CheckReserves( $item->{'itemnumber'} );
- if ($restype) {
- my $resbor = $res->{'borrowernumber'};
- if ( $resbor eq $borrower->{'borrowernumber'} ) {
+ if ( $actualissue->{borrowernumber}) {
+ # 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
+ AddReturn(
+ $item->{'barcode'},
+ C4::Context->userenv->{'branch'}
+ );
+ }
- # The item is reserved by the current patron
- ModReserveFill($res);
- }
- elsif ( $restype eq "Waiting" ) {
-
- # warn "Waiting";
- # The item is on reserve and waiting, but has been
- # reserved by some other patron.
- my ( $resborrower, $flags ) = GetMemberDetails( $resbor, 0 );
- my $branches = GetBranches();
- my $branchname =
- $branches->{ $res->{'branchcode'} }->{'branchname'};
- }
- elsif ( $restype eq "Reserved" ) {
-
- # warn "Reserved";
- # The item is reserved by someone else.
- my ( $resborrower, $flags ) =
- GetMemberDetails( $resbor, 0 );
- my $branches = GetBranches();
- my $branchname =
- $branches->{ $res->{'branchcode'} }->{'branchname'};
- if ($cancelreserve) { # cancel reserves on this item
- CancelReserve( 0, $res->{'itemnumber'},
- $res->{'borrowernumber'} );
- }
- }
- if ($cancelreserve) {
- CancelReserve( $res->{'biblionumber'}, 0,
+ # See if the item is on reserve.
+ my ( $restype, $res ) =
+ C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+ if ($restype) {
+ my $resbor = $res->{'borrowernumber'};
+ if ( $resbor eq $borrower->{'borrowernumber'} ) {
+
+ # The item is reserved by the current patron
+ ModReserveFill($res);
+ }
+ elsif ( $restype eq "Waiting" ) {
+
+ # warn "Waiting";
+ # The item is on reserve and waiting, but has been
+ # reserved by some other patron.
+ my ( $resborrower, $flags ) = GetMemberDetails( $resbor, 0 );
+ my $branches = GetBranches();
+ my $branchname =
+ $branches->{ $res->{'branchcode'} }->{'branchname'};
+ }
+ elsif ( $restype eq "Reserved" ) {
+
+ # warn "Reserved";
+ # The item is reserved by someone else.
+ my ( $resborrower, $flags ) =
+ GetMemberDetails( $resbor, 0 );
+ my $branches = GetBranches();
+ my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'};
+ if ($cancelreserve) { # cancel reserves on this item
+ CancelReserve( 0, $res->{'itemnumber'},
+ $res->{'borrowernumber'} );
+ }
+ }
+ if ($cancelreserve) {
+ CancelReserve( $res->{'biblionumber'}, 0,
$res->{'borrowernumber'} );
- }
- else {
- # set waiting reserve to first in reserve queue as book isn't waiting now
- ModReserve(
- 1,
- $res->{'biblionumber'},
- $res->{'borrowernumber'},
- $res->{'branchcode'}
- );
- }
- }
+ }
+ else {
+ # set waiting reserve to first in reserve queue as book isn't waiting now
+ ModReserve(1,
+ $res->{'biblionumber'},
+ $res->{'borrowernumber'},
+ $res->{'branchcode'}
+ );
+ }
+ }
- # Starting process for transfer job (checking transfert and validate it if we have one)
+ # Starting process for transfer job (checking transfert and validate it if we have one)
my ($datesent) = GetTransfers($item->{'itemnumber'});
if ($datesent) {
# updating line of branchtranfert to finish it, and changing the to branch value, implement a comment for lisibility of this case (maybe for stats ....)
my $loanlength = GetLoanLength(
$borrower->{'categorycode'},
$itype,
- $borrower->{'branchcode'}
+ $branch
);
$datedue = time + ($loanlength) * 86400;
my @datearr = localtime($datedue);
);
$sth->finish;
$item->{'issues'}++;
- $sth =
- $dbh->prepare(
- "UPDATE items SET issues=?, holdingbranch=?, itemlost=0, datelastborrowed = now(), onloan = ? WHERE itemnumber=?");
- $sth->execute(
- $item->{'issues'},
- C4::Context->userenv->{'branch'},
- $dateduef->output('iso'),
- $item->{'itemnumber'}
- );
- $sth->finish;
- &ModDateLastSeen( $item->{'itemnumber'} );
- my $record = GetMarcItem( $item->{'biblionumber'}, $item->{'itemnumber'} );
- my $frameworkcode = GetFrameworkCode( $item->{'biblionumber'} );
- ModItemInMarc( $record, $item->{'biblionumber'}, $item->{'itemnumber'}, $frameworkcode );
+ ModItem({ issues => $item->{'issues'},
+ holdingbranch => C4::Context->userenv->{'branch'},
+ itemlost => 0,
+ datelastborrowed => C4::Dates->new()->output('iso'),
+ onloan => $dateduef->output('iso'),
+ }, $item->{'biblionumber'}, $item->{'itemnumber'});
+ ModDateLastSeen( $item->{'itemnumber'} );
+
# If it costs to borrow this book, charge it to the patron's account.
my ( $charge, $itemtype ) = GetIssuingCharges(
$item->{'itemnumber'},
&logaction(C4::Context->userenv->{'number'},"CIRCULATION","ISSUE",$borrower->{'borrowernumber'},$biblio->{'biblionumber'})
if C4::Context->preference("IssueLog");
return ($datedue);
- }
+ }
}
=head2 GetLoanLength
# get information on item
my $iteminformation = GetItemIssue( GetItemnumberFromBarcode($barcode));
- my $biblio = GetBiblioFromItemNumber($iteminformation->{'itemnumber'});
+ my $biblio = GetBiblioItemData($iteminformation->{'biblioitemnumber'});
+# use Data::Dumper;warn Data::Dumper::Dumper($iteminformation);
unless ($iteminformation->{'itemnumber'} ) {
$messages->{'BadBarcode'} = $barcode;
$doreturn = 0;
$messages->{'IsPermanent'} = $hbr;
}
- # if independent branches are on and returning to different branch, refuse the return
+ # if independent branches are on and returning to different branch, refuse the return
if ($hbr ne C4::Context->userenv->{'branch'} && C4::Context->preference("IndependantBranches")){
- $messages->{'Wrongbranch'} = 1;
- $doreturn=0;
- }
+ $messages->{'Wrongbranch'} = 1;
+ $doreturn=0;
+ }
# check that the book has been cancelled
if ( $iteminformation->{'wthdrawn'} ) {
# continue to deal with returns cases, but not only if we have an issue
- # the holdingbranch is updated if the document is returned in an other location .
- if ( $iteminformation->{'holdingbranch'} ne C4::Context->userenv->{'branch'} ) {
- UpdateHoldingbranch(C4::Context->userenv->{'branch'},$iteminformation->{'itemnumber'});
- # reload iteminformation holdingbranch with the userenv value
- $iteminformation->{'holdingbranch'} = C4::Context->userenv->{'branch'};
- }
+ # the holdingbranch is updated if the document is returned in an other location .
+ if ( $iteminformation->{'holdingbranch'} ne C4::Context->userenv->{'branch'} ) {
+ UpdateHoldingbranch(C4::Context->userenv->{'branch'},$iteminformation->{'itemnumber'});
+ # reload iteminformation holdingbranch with the userenv value
+ $iteminformation->{'holdingbranch'} = C4::Context->userenv->{'branch'};
+ }
ModDateLastSeen( $iteminformation->{'itemnumber'} );
- my $sth = $dbh->prepare("UPDATE items SET onloan = NULL where itemnumber = ?");
- $sth->execute($iteminformation->{'itemnumber'});
- $sth->finish();
- my $record = GetMarcItem( $biblio->{'biblionumber'}, $iteminformation->{'itemnumber'} );
- my $frameworkcode = GetFrameworkCode( $biblio->{'biblionumber'} );
- ModItemInMarc( $record, $biblio->{'biblionumber'}, $iteminformation->{'itemnumber'}, $frameworkcode );
-
- if ($iteminformation->{borrowernumber}){
- ($borrower) = C4::Members::GetMemberDetails( $iteminformation->{borrowernumber}, 0 );
- }
+ ModItem({ onloan => undef }, $biblio->{'biblionumber'}, $iteminformation->{'itemnumber'});
+
+ if ($iteminformation->{borrowernumber}){
+ ($borrower) = C4::Members::GetMemberDetails( $iteminformation->{borrowernumber}, 0 );
+ }
# fix up the accounts.....
if ( $iteminformation->{'itemlost'} ) {
$messages->{'WasLost'} = 1;
UpdateStats(
$branch, 'return', '0', '',
$iteminformation->{'itemnumber'},
- $iteminformation->{'itemtype'},
+ $biblio->{'itemtype'},
$borrower->{'borrowernumber'}
);
VALUES (?,?,?,?)");
$usth->execute($borrower->{'borrowernumber'},$data->{'accountno'},$nextaccntno,$offset);
$usth->finish;
- $usth = $dbh->prepare("UPDATE items SET paidfor='' WHERE itemnumber=?");
- $usth->execute($itm);
- $usth->finish;
+ ModItem({ paidfor => '' }, undef, $itm);
}
$sth->finish;
return;
C<$itemnumber> is the itemnumber
Returns an array of hashes
+
=cut
sub GetItemIssue {
C<$history> is 0 if you want actuel "issuer" (if it exist) and 1 if you want issues history
Returns an array of hashes
+
=cut
sub GetItemIssues {
=head2 CanBookBeRenewed
-$ok = &CanBookBeRenewed($borrowernumber, $itemnumber);
+($ok,$error) = &CanBookBeRenewed($borrowernumber, $itemnumber);
Find out whether a borrowed item may be renewed.
C<$CanBookBeRenewed> returns a true value iff the item may be renewed. The
item must currently be on loan to the specified borrower; renewals
must be allowed for the item's type; and the borrower must not have
-already renewed the loan.
+already renewed the loan. $error will contain the reason the renewal can not proceed
=cut
my $dbh = C4::Context->dbh;
my $renews = 1;
my $renewokay = 0;
+ my $error;
# Look in the issues table for this item, lent to this borrower,
# and not yet returned.
if ( my $data2 = $sth2->fetchrow_hashref ) {
$renews = $data2->{'renewalsallowed'};
}
- if ( $renews && $renews >= $data1->{'renewals'} ) {
+ if ( $renews && $renews > $data1->{'renewals'} ) {
$renewokay = 1;
}
+ else {
+ $error="too_many";
+ }
$sth2->finish;
my ( $resfound, $resrec ) = C4::Reserves::CheckReserves($itemnumber);
if ($resfound) {
$renewokay = 0;
+ $error="on_reserve"
}
}
$sth1->finish;
- return ($renewokay);
+ return ($renewokay,$error);
}
=head2 AddRenewal
my ( $borrowernumber, $itemnumber, $branch ,$datedue ) = @_;
my $dbh = C4::Context->dbh;
-
- my $biblio = GetBiblioFromItemNumber($itemnumber);
+ my $biblio = GetBiblioFromItemNumber($itemnumber);
# If the due date wasn't specified, calculate it by adding the
# book's loan length to today's date.
unless ( $datedue ) {
# Update the renewal count on the item, and tell zebra to reindex
$renews = $biblio->{'renewals'} + 1;
- $sth = $dbh->prepare("UPDATE items SET renewals = ? WHERE itemnumber = ?");
- $sth->execute($renews,$itemnumber);
- $sth->finish();
- my $record = GetMarcItem( $biblio->{'biblionumber'}, $itemnumber );
- my $frameworkcode = GetFrameworkCode( $biblio->{'biblionumber'} );
- ModItemInMarc( $record, $biblio->{'biblionumber'}, $itemnumber, $frameworkcode );
+ ModItem({ renewals => $renews }, $biblio->{'biblionumber'}, $itemnumber);
# Charge a new rental fee, if applicable?
my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber );
my $data2 = $sth2->fetchrow_hashref();
$renewsallowed = $data2->{'renewalsallowed'};
$renewsleft = $renewsallowed - $renewcount;
- warn "Renewcount:$renewcount RenewsAll:$renewsallowed RenewLeft:$renewsleft";
+# warn "Renewcount:$renewcount RenewsAll:$renewsallowed RenewLeft:$renewsleft";
return ($renewcount,$renewsallowed,$renewsleft);
}
=head2 GetIssuingCharges
$items = UpdateHoldingbranch($branch,$itmenumber);
Simple methode for updating hodlingbranch in items BDD line
+
=cut
sub UpdateHoldingbranch {
- my ( $branch,$itmenumber ) = @_;
- my $dbh = C4::Context->dbh;
-# first step validate the actual line of transfert .
- my $sth =
- $dbh->prepare(
- "update items set holdingbranch = ? where itemnumber= ?"
- );
- $sth->execute($branch,$itmenumber);
- $sth->finish;
-
-
+ my ( $branch,$itemnumber ) = @_;
+ ModItem({ holdingbranch => $branch }, undef, $itemnumber);
}
+
=head2 CheckValidDatedue
$newdatedue = CheckValidDatedue($date_due,$itemnumber,$branchcode);
C<$date_due> = returndate calculate with no day check
C<$itemnumber> = itemnumber
C<$branchcode> = localisation of issue
+
=cut
+
# Why not create calendar object? -
# TODO add 'duedate' option to useDaysMode .
sub CheckValidDatedue {
my $newdatedue=C4::Dates->new(sprintf("%04d-%02d-%02d",$years,$month,$day),'iso');
return $newdatedue;
}
+
=head2 CheckRepeatableHolidays
$countrepeatable = CheckRepeatableHoliday($itemnumber,$week_day,$branchcode);
C<$day> = the day of datedue
C<$itemnumber> = itemnumber
C<$branchcode> = localisation of issue
+
=cut
+
sub CheckSpecialHolidays{
my ($years,$month,$day,$itemnumber,$branchcode) = @_;
my $dbh = C4::Context->dbh;
C<$day> = the day of datedue
C<$itemnumber> = itemnumber
C<$branchcode> = localisation of issue
+
=cut
+
sub CheckRepeatableSpecialHolidays{
my ($month,$day,$itemnumber,$branchcode) = @_;
my $dbh = C4::Context->dbh;