use C4::Debug;
use C4::Branch; # GetBranches
use C4::Log; # logaction
-
+use C4::Koha qw(GetAuthorisedValueByCode);
+use C4::Overdues qw(CalcFine UpdateFine);
use Data::Dumper;
use Koha::DateUtils;
use Koha::Calendar;
{
$issuingimpossible{RESTRICTED} = 1;
}
+ if ( $item->{'itemlost'} ) {
+ $needsconfirmation{ITEM_LOST} = GetAuthorisedValueByCode( 'LOST', $item->{'itemlost'} );
+ }
if ( C4::Context->preference("IndependantBranches") ) {
my $userenv = C4::Context->userenv;
if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) {
Retrieves circulation rule attributes that apply to the given
branch and item type, regardless of patron category.
-The return value is a hashref containing the following key:
+The return value is a hashref containing the following keys:
holdallowed => Hold policy for this branch and itemtype. Possible values:
0: No holds allowed.
1: Holds allowed only by patrons that have the same homebranch as the item.
2: Holds allowed from any patron.
+returnbranch => branch to which to return item. Possible values:
+ noreturn: do not return, let item remain where checked in (floating collections)
+ homebranch: return to item's home branch
+
This searches branchitemrules in the following order:
* Same branchcode and itemtype
* branchcode '*', same itemtype
* branchcode and itemtype '*'
-Neither C<$branchcode> nor C<$categorycode> should be '*'.
+Neither C<$branchcode> nor C<$itemtype> should be '*'.
=cut
my $result = {};
my @attempts = (
- ['SELECT holdallowed
+ ['SELECT holdallowed, returnbranch
FROM branch_item_rules
WHERE branchcode = ?
AND itemtype = ?', $branchcode, $itemtype],
- ['SELECT holdallowed
+ ['SELECT holdallowed, returnbranch
FROM default_branch_circ_rules
WHERE branchcode = ?', $branchcode],
- ['SELECT holdallowed
+ ['SELECT holdallowed, returnbranch
FROM default_branch_item_rules
WHERE itemtype = ?', $itemtype],
- ['SELECT holdallowed
+ ['SELECT holdallowed, returnbranch
FROM default_circ_rules'],
);
foreach my $attempt (@attempts) {
my ($query, @bind_params) = @{$attempt};
+ my $search_result = $dbh->selectrow_hashref ( $query , {}, @bind_params );
# Since branch/category and branch/itemtype use the same per-branch
# defaults tables, we have to check that the key we want is set, not
# just that a row was returned
- return $result if ( defined( $result->{'holdallowed'} = $dbh->selectrow_array( $query, {}, @bind_params ) ) );
+ $result->{'holdallowed'} = $search_result->{'holdallowed'} unless ( defined $result->{'holdallowed'} );
+ $result->{'returnbranch'} = $search_result->{'returnbranch'} unless ( defined $result->{'returnbranch'} );
}
# built-in default circulation rule
- return {
- holdallowed => 2,
- };
+ $result->{'holdallowed'} = 2 unless ( defined $result->{'holdallowed'} );
+ $result->{'returnbranch'} = 'homebranch' unless ( defined $result->{'returnbranch'} );
+
+ return $result;
}
=head2 AddReturn
my $item = GetItem($itemnumber) or die "GetItem($itemnumber) failed";
# full item data, but no borrowernumber or checkout info (no issue)
# we know GetItem should work because GetItemnumberFromBarcode worked
- my $hbr = C4::Context->preference("HomeOrHoldingBranchReturn") || "homebranch";
- $hbr = $item->{$hbr} || '';
- # item must be from items table -- issues table has branchcode and issuingbranch, not homebranch nor holdingbranch
+ my $hbr = GetBranchItemRule($item->{'homebranch'}, $item->{'itype'})->{'returnbranch'} || "homebranch";
+ # get the proper branch to which to return the item
+ $hbr = $item->{$hbr} || $branch ;
+ # if $hbr was "noreturn" or any other non-item table value, then it should 'float' (i.e. stay at this branch)
my $borrowernumber = $borrower->{'borrowernumber'} || undef; # we don't know if we had a borrower or not
# case of a return of document (deal with issues and holdingbranch)
if ($doreturn) {
+ my $today = DateTime->now( time_zone => C4::Context->tz() );
+ my $datedue = $issue->{date_due};
$borrower or warn "AddReturn without current borrower";
my $circControlBranch;
if ($dropbox) {
# FIXME: check issuedate > returndate, factoring in holidays
#$circControlBranch = _GetCircControlBranch($item,$borrower) unless ( $item->{'issuedate'} eq C4::Dates->today('iso') );;
$circControlBranch = _GetCircControlBranch($item,$borrower);
+ my $datedue = $issue->{date_due};
+ $issue->{'overdue'} = DateTime->compare($issue->{'date_due'}, $today ) == -1 ? 1 : 0;
}
if ($borrowernumber) {
+ if($issue->{'overdue'}){
+ my ( $amount, $type, $daycounttotal ) = C4::Overdues::CalcFine( $item, $borrower->{categorycode},$branch, $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)
+ );
+ }
+ }
MarkIssueReturned($borrowernumber, $item->{'itemnumber'}, $circControlBranch, '', $borrower->{'privacy'});
$messages->{'WasReturned'} = 1; # FIXME is the "= 1" right? This could be the borrower hash.
}