use Data::Dumper;
use Koha::DateUtils;
use Koha::Calendar;
+use Koha::Borrower::Debarments;
use Carp;
use Date::Calc qw(
Today
logaction("CIRCULATION", "RETURN", $borrowernumber, $item->{'itemnumber'})
if C4::Context->preference("ReturnLog");
+ # Remove any OVERDUES related debarment if the borrower has no overdues
+ if ( $borrowernumber
+ && $borrower->{'debarred'}
+ && C4::Context->preference('AutoRemoveOverduesRestrictions')
+ && !HasOverdues( $borrowernumber )
+ && @{ GetDebarments({ borrowernumber => $borrowernumber, type => 'OVERDUES' }) }
+ ) {
+ DelUniqueDebarment({ borrowernumber => $borrowernumber, type => 'OVERDUES' });
+ }
+
# FIXME: make this comment intelligible.
#adding message if holdingbranch is non equal a userenv branch to return the document to homebranch
#we check, if we don't have reserv or transfert for this document, if not, return it to homebranch .
my $new_debar_dt =
$dt_today->clone()->add_duration( $deltadays * $finedays );
- if ( $borrower->{debarred} ) {
- my $borrower_debar_dt = dt_from_string( $borrower->{debarred} );
- # Update patron only if new date > old
- if ( DateTime->compare( $borrower_debar_dt, $new_debar_dt ) !=
- -1 )
- {
- return;
- }
+ Koha::Borrower::Debarments::AddUniqueDebarment({
+ borrowernumber => $borrower->{borrowernumber},
+ expiration => $new_debar_dt->ymd(),
+ type => 'SUSPENSION',
+ });
- }
- C4::Members::DebarMember( $borrower->{borrowernumber},
- $new_debar_dt->ymd() );
return $new_debar_dt->ymd();
}
}
sub GetOpenIssue {
my ( $itemnumber ) = @_;
-
+ return unless $itemnumber;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare( "SELECT * FROM issues WHERE itemnumber = ? AND returndate IS NULL" );
$sth->execute( $itemnumber );
- my $issue = $sth->fetchrow_hashref();
- return $issue;
+ return $sth->fetchrow_hashref();
+
}
=head2 GetItemIssues
=cut
sub CanBookBeRenewed {
-
- # check renewal status
my ( $borrowernumber, $itemnumber, $override_limit ) = @_;
+
my $dbh = C4::Context->dbh;
my $renews = 1;
my $renewokay = 0;
my $error;
- my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ) or return;
- my $item = GetItem($itemnumber) or return;
- my $itemissue = GetItemIssue($itemnumber) or return;
+ my $item = GetItem($itemnumber) or return ( 0, 'no_item' );
+ my $itemissue = GetItemIssue($itemnumber) or return ( 0, 'no_checkout' );
+
+ $borrowernumber ||= $itemissue->{borrowernumber};
+ my $borrower = C4::Members::GetMemberDetails($borrowernumber)
+ or return;
my $branchcode = _GetCircControlBranch($item, $borrower);
=cut
sub AddRenewal {
- my $borrowernumber = shift or return;
+ my $borrowernumber = shift;
my $itemnumber = shift or return;
my $branch = shift;
my $datedue = shift;
my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz)->ymd();
+
my $item = GetItem($itemnumber) or return;
my $biblio = GetBiblioFromItemNumber($itemnumber) or return;
my $dbh = C4::Context->dbh;
+
# Find the issues record for this book
my $sth =
- $dbh->prepare("SELECT * FROM issues
- WHERE borrowernumber=?
- AND itemnumber=?"
- );
- $sth->execute( $borrowernumber, $itemnumber );
+ $dbh->prepare("SELECT * FROM issues WHERE itemnumber = ?");
+ $sth->execute( $itemnumber );
my $issuedata = $sth->fetchrow_hashref;
- if(defined $datedue && ref $datedue ne 'DateTime' ) {
+
+ return unless ( $issuedata );
+
+ $borrowernumber ||= $issuedata->{borrowernumber};
+
+ if ( defined $datedue && ref $datedue ne 'DateTime' ) {
carp 'Invalid date passed to AddRenewal.';
return;
}
+
# If the due date wasn't specified, calculate it by adding the
# book's loan length to today's date or the current due date
# based on the value of the RenewalPeriodBase syspref.
}
}
+ # Remove any OVERDUES related debarment if the borrower has no overdues
+ my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber );
+ if ( $borrowernumber
+ && $borrower->{'debarred'}
+ && !HasOverdues( $borrowernumber )
+ && @{ GetDebarments({ borrowernumber => $borrowernumber, type => 'OVERDUES' }) }
+ ) {
+ DelUniqueDebarment({ borrowernumber => $borrowernumber, type => 'OVERDUES' });
+ }
+
# Log the renewal
UpdateStats( $branch, 'renew', $charge, '', $itemnumber, $item->{itype}, $borrowernumber, undef, $item->{'ccode'});
return $datedue;
sub DeleteTransfer {
my ($itemnumber) = @_;
+ return unless $itemnumber;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare(
"DELETE FROM branchtransfers
WHERE itemnumber=?
AND datearrived IS NULL "
);
- $sth->execute($itemnumber);
+ return $sth->execute($itemnumber);
}
=head2 AnonymiseIssueHistory
}
sub GetOfflineOperation {
- my $operationid = shift;
- return unless $operationid;
+ my $operationid = shift;
+ return unless $operationid;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("SELECT * FROM pending_offline_operations WHERE operationid=?");
$sth->execute( $operationid );