&GetOpenIssue
&AnonymiseIssueHistory
&CheckIfIssuedToPatron
+ &IsItemIssued
);
# subs to deal with returns
$data->{'borrower'} = $data2->{'borrowernumber'};
}
else {
- $data->{'date_due'} = ($data->{'wthdrawn'} eq '1') ? 'Cancelled' : 'Available';
+ $data->{'date_due'} = ($data->{'withdrawn'} eq '1') ? 'Cancelled' : 'Available';
}
$needsconfirmation{PATRON_CANT} = 1;
} else {
if($max_loans_allowed){
- $needsconfirmation{TOO_MANY} = 1;
- $needsconfirmation{current_loan_count} = $current_loan_count;
- $needsconfirmation{max_loans_allowed} = $max_loans_allowed;
+ if ( C4::Context->preference("AllowTooManyOverride") ) {
+ $needsconfirmation{TOO_MANY} = 1;
+ $needsconfirmation{current_loan_count} = $current_loan_count;
+ $needsconfirmation{max_loans_allowed} = $max_loans_allowed;
+ } else {
+ $issuingimpossible{TOO_MANY} = 1;
+ $issuingimpossible{current_loan_count} = $current_loan_count;
+ $issuingimpossible{max_loans_allowed} = $max_loans_allowed;
+ }
}
}
}
}
}
- if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} > 0 )
+ if ( $item->{'withdrawn'} && $item->{'withdrawn'} > 0 )
{
$issuingimpossible{WTHDRAWN} = 1;
}
$needsconfirmation{ITEM_LOST} = $code if ( C4::Context->preference("IssueLostItem") eq 'confirm' );
$alerts{ITEM_LOST} = $code if ( C4::Context->preference("IssueLostItem") eq 'alert' );
}
- if ( C4::Context->preference("IndependantBranches") ) {
+ if ( C4::Context->preference("IndependentBranches") ) {
my $userenv = C4::Context->userenv;
if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) {
- $issuingimpossible{ITEMNOTSAMEBRANCH} = 1
- if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} );
+ if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} ){
+ $issuingimpossible{ITEMNOTSAMEBRANCH} = 1;
+ $issuingimpossible{'itemhomebranch'} = $item->{C4::Context->preference("HomeOrHoldingBranch")};
+ }
$needsconfirmation{BORRNOTSAMEBRANCH} = GetBranchName( $borrower->{'branchcode'} )
if ( $borrower->{'branchcode'} ne $userenv->{branch} );
}
this book, you are not allowed to return it. The value is the code for
the book's home branch.
-=item C<wthdrawn>
+=item C<withdrawn>
This book has been withdrawn/cancelled. The value should be ignored.
return ( $doreturn, $messages, $issue, $borrower );
}
- if ( $item->{'wthdrawn'} ) { # book has been cancelled
- $messages->{'wthdrawn'} = 1;
+ if ( $item->{'withdrawn'} ) { # book has been cancelled
+ $messages->{'withdrawn'} = 1;
$doreturn = 0 if C4::Context->preference("BlockReturnOfWithdrawnItems");
}
}
if ($borrowernumber) {
- if($issue->{'overdue'}){
- my ( $amount, $type, $unitcounttotal ) = C4::Overdues::CalcFine( $item, $borrower->{categorycode},$branch, $datedue, $today );
+ if( C4::Context->preference('CalculateFinesOnReturn') && $issue->{'overdue'}){
+ # we only need to calculate and change the fines if we want to do that on return
+ # Should be on for hourly loans
+ my $control = C4::Context->preference('CircControl');
+ my $control_branchcode =
+ ( $control eq 'ItemHomeLibrary' ) ? $item->{homebranch}
+ : ( $control eq 'PatronLibrary' ) ? $borrower->{branchcode}
+ : $issue->{branchcode};
+
+ my ( $amount, $type, $unitcounttotal ) =
+ C4::Overdues::CalcFine( $item, $borrower->{categorycode},
+ $control_branchcode, $datedue, $today );
+
$type ||= q{};
- if ( $amount > 0 && ( C4::Context->preference('finesMode') eq 'production' )) {
- C4::Overdues::UpdateFine(
- $issue->{itemnumber},
- $issue->{borrowernumber},
- $amount, $type, output_pref($datedue)
- );
- }
+
+ if ( $amount > 0
+ && C4::Context->preference('finesMode') eq 'production' )
+ {
+ C4::Overdues::UpdateFine( $issue->{itemnumber},
+ $issue->{borrowernumber},
+ $amount, $type, output_pref($datedue) );
+ }
}
- MarkIssueReturned($borrowernumber, $item->{'itemnumber'}, $circControlBranch, '', $borrower->{'privacy'});
- $messages->{'WasReturned'} = 1; # FIXME is the "= 1" right? This could be the borrower hash.
+
+ MarkIssueReturned( $borrowernumber, $item->{'itemnumber'},
+ $circControlBranch, '', $borrower->{'privacy'} );
+
+ # FIXME is the "= 1" right? This could be the borrower hash.
+ $messages->{'WasReturned'} = 1;
+
}
ModItem({ onloan => undef }, $issue->{'biblionumber'}, $item->{'itemnumber'});
# find reserves.....
# if we don't have a reserve with the status W, we launch the Checkreserves routine
my ($resfound, $resrec);
- ($resfound, $resrec, undef) = C4::Reserves::CheckReserves( $item->{'itemnumber'} ) unless ( $item->{'wthdrawn'} );
+ my $lookahead= C4::Context->preference('ConfirmFutureHolds'); #number of days to look for future holds
+ ($resfound, $resrec, undef) = C4::Reserves::CheckReserves( $item->{'itemnumber'}, undef, $lookahead ) unless ( $item->{'withdrawn'} );
if ($resfound) {
$resrec->{'ResFound'} = $resfound;
$messages->{'ResFound'} = $resrec;
FROM issues
LEFT JOIN items USING (itemnumber)
LEFT OUTER JOIN branches USING (branchcode)
-WhERE returndate is NULL
-AND ( TO_DAYS( NOW() )-TO_DAYS( date_due ) ) < ?
+WHERE returndate is NULL
+HAVING days_until_due > 0 AND days_until_due < ?
END_SQL
my @bind_parameters = ( $params->{'days_in_advance'} );
$error = "too_many";
}
- my $resstatus = C4::Reserves::GetReserveStatus($itemnumber);
- if ( $resstatus eq "Waiting" or $resstatus eq "Reserved" ) {
+ my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves( $itemnumber );
+
+ if ( $resfound ) { # '' when no hold was found
$renewokay = 0;
$error = "on_reserve";
}
sub CreateBranchTransferLimit {
my ( $toBranch, $fromBranch, $code ) = @_;
-
+ return unless defined($toBranch) && defined($fromBranch);
my $limitType = C4::Context->preference("BranchTransferLimitsType");
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("INSERT INTO branch_transfer_limits ( $limitType, toBranch, fromBranch ) VALUES ( ?, ?, ? )");
- $sth->execute( $code, $toBranch, $fromBranch );
+ return $sth->execute( $code, $toBranch, $fromBranch );
}
=head2 DeleteBranchTransferLimits
-DeleteBranchTransferLimits($frombranch);
+ my $result = DeleteBranchTransferLimits($frombranch);
-Deletes all the branch transfer limits for one branch
+Deletes all the library transfer limits for one library. Returns the
+number of limits deleted, 0e0 if no limits were deleted, or undef if
+no arguments are supplied.
=cut
sub DeleteBranchTransferLimits {
my $branch = shift;
+ return unless defined $branch;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("DELETE FROM branch_transfer_limits WHERE fromBranch = ?");
- $sth->execute($branch);
+ return $sth->execute($branch);
}
sub ReturnLostItem{
sub LostItem{
- my ($itemnumber, $mark_returned, $charge_fee) = @_;
+ my ($itemnumber, $mark_returned) = @_;
my $dbh = C4::Context->dbh();
my $sth=$dbh->prepare("SELECT issues.*,items.*,biblio.title
my $issues=$sth->fetchrow_hashref();
$sth->finish;
- # if a borrower lost the item, add a replacement cost to the their record
+ # If a borrower lost the item, add a replacement cost to the their record
if ( my $borrowernumber = $issues->{borrowernumber} ){
my $borrower = C4::Members::GetMemberDetails( $borrowernumber );
- C4::Accounts::chargelostitem($borrowernumber, $itemnumber, $issues->{'replacementprice'}, "Lost Item $issues->{'title'} $issues->{'barcode'}")
- if $charge_fee;
- #FIXME : Should probably have a way to distinguish this from an item that really was returned.
- #warn " $issues->{'borrowernumber'} / $itemnumber ";
+ if (C4::Context->preference('WhenLostForgiveFine')){
+ my $fix = _FixOverduesOnReturn($borrowernumber, $itemnumber, 1, 0); # 1, 0 = exemptfine, no-dropbox
+ defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $itemnumber...) failed!"; # zero is OK, check defined
+ }
+ if (C4::Context->preference('WhenLostChargeReplacementFee')){
+ C4::Accounts::chargelostitem($borrowernumber, $itemnumber, $issues->{'replacementprice'}, "Lost Item $issues->{'title'} $issues->{'barcode'}");
+ #FIXME : Should probably have a way to distinguish this from an item that really was returned.
+ #warn " $issues->{'borrowernumber'} / $itemnumber ";
+ }
+
MarkIssueReturned($borrowernumber,$itemnumber,undef,undef,$borrower->{'privacy'}) if $mark_returned;
}
}
return;
}
+=head2 IsItemIssued
+
+ IsItemIssued( $itemnumber )
+
+ Return 1 if the item is on loan, otherwise return 0
+
+=cut
+
+sub IsItemIssued {
+ my $itemnumber = shift;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare(q{
+ SELECT COUNT(*)
+ FROM issues
+ WHERE itemnumber = ?
+ });
+ $sth->execute($itemnumber);
+ return $sth->fetchrow;
+}
1;