my $messages;
my $dotransfer = 1;
my $itemnumber = GetItemnumberFromBarcode( $barcode );
- my $issue = GetItemIssue($itemnumber);
+ my $issue = Koha::Checkouts->find({ itemnumber => $itemnumber });
my $biblio = GetBiblioFromItemNumber($itemnumber);
# bad barcode..
}
# check if it is still issued to someone, return it...
- if ($issue->{borrowernumber}) {
+ if ( $issue ) {
AddReturn( $barcode, $fbr );
- $messages->{'WasReturned'} = $issue->{borrowernumber};
+ $messages->{'WasReturned'} = $issue->borrowernumber;
}
# find reserves.....
my $override_high_holds = $params->{override_high_holds} || 0;
my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
- my $issue = GetItemIssue($item->{itemnumber});
+ my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
my $biblioitem = GetBiblioItemData($item->{biblioitemnumber});
$item->{'itemtype'}=$item->{'itype'};
my $dbh = C4::Context->dbh;
#
my $switch_onsite_checkout = (
C4::Context->preference('SwitchOnSiteCheckouts')
- and $issue->{onsite_checkout}
and $issue
- and $issue->{borrowernumber} == $borrower->{'borrowernumber'} ? 1 : 0 );
+ and $issue->onsite_checkout
+ and $issue->borrowernumber == $borrower->{'borrowernumber'} ? 1 : 0 );
my $toomany = TooMany( $borrower, $item->{biblionumber}, $item, { onsite_checkout => $onsite_checkout, switch_onsite_checkout => $switch_onsite_checkout, } );
# if TooMany max_allowed returns 0 the user doesn't have permission to check out this book
if ( $toomany ) {
#
# CHECK IF BOOK ALREADY ISSUED TO THIS BORROWER
#
- if ( $issue->{borrowernumber} && $issue->{borrowernumber} eq $borrower->{'borrowernumber'} ){
+ if ( $issue && $issue->borrowernumber eq $borrower->{'borrowernumber'} ){
# Already issued to current borrower.
# If it is an on-site checkout if it can be switched to a normal checkout
# or ask whether the loan should be renewed
- if ( $issue->{onsite_checkout}
+ if ( $issue->onsite_checkout
and C4::Context->preference('SwitchOnSiteCheckouts') ) {
$messages{ONSITE_CHECKOUT_WILL_BE_SWITCHED} = 1;
} else {
}
}
}
- elsif ($issue->{borrowernumber}) {
+ elsif ( $issue ) {
# issued to someone else
- my $currborinfo = C4::Members::GetMember( borrowernumber => $issue->{borrowernumber} );
+ my $currborinfo = C4::Members::GetMember( borrowernumber => $issue->borrowernumber );
my ( $can_be_returned, $message ) = CanBookBeReturned( $item, C4::Context->userenv->{branch} );
my $branch = _GetCircControlBranch( $item, $borrower );
# get actual issuing if there is one
- my $actualissue = GetItemIssue( $item->{itemnumber} );
+ my $actualissue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
# get biblioinformation for this item
my $biblio = GetBiblioFromItemNumber( $item->{itemnumber} );
# check if we just renew the issue.
- if ( $actualissue->{borrowernumber} eq $borrower->{'borrowernumber'}
+ if ( $actualissue and $actualissue->borrowernumber eq $borrower->{'borrowernumber'}
and not $switch_onsite_checkout ) {
$datedue = AddRenewal(
$borrower->{'borrowernumber'},
}
else {
# it's NOT a renewal
- if ( $actualissue->{borrowernumber}
- and not $switch_onsite_checkout ) {
+ if ( $actualissue and not $switch_onsite_checkout ) {
# 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
my ( $allowed, $message ) = CanBookBeReturned( $item, C4::Context->userenv->{branch} );
}
if ($borrowernumber) {
- if ( ( C4::Context->preference('CalculateFinesOnReturn') && $issue->{'overdue'} ) || $return_date ) {
- _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower, return_date => $return_date } );
- }
-
eval {
my $issue_id = MarkIssueReturned( $borrowernumber, $item->{'itemnumber'},
$circControlBranch, $return_date, $borrower->{'privacy'} );
$issue->{issue_id} = $issue_id;
};
- if ( $@ ) {
+ unless ( $@ ) {
+ if ( ( C4::Context->preference('CalculateFinesOnReturn') && $issue->{'overdue'} ) || $return_date ) {
+ _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower, return_date => $return_date } );
+ }
+ } else {
$messages->{'Wrongbranch'} = {
Wrongbranch => $branch,
Rightbranch => $message
# FIXME Improve the return value and handle it from callers
$schema->txn_do(sub {
+
$dbh->do( $query, undef, @bind );
- my $id_already_exists = $dbh->selectrow_array(
- q|SELECT COUNT(*) FROM old_issues WHERE issue_id = ?|,
- undef, $issue_id
- );
+ my $issue = Koha::Checkouts->find( $issue_id ); # FIXME should be fetched earlier
- if ( $id_already_exists ) {
- my $new_issue_id = $dbh->selectrow_array(q|SELECT MAX(issue_id)+1 FROM old_issues|);
- $dbh->do(
- q|UPDATE issues SET issue_id = ? WHERE issue_id = ?|,
- undef, $new_issue_id, $issue_id
- );
+ # Create the old_issues entry
+ my $old_checkout_data = $issue->unblessed;
+
+ if ( Koha::Old::Checkouts->find( $issue_id ) ) {
+ my $new_issue_id = ( Koha::Old::Checkouts->search(
+ {},
+ { columns => [ { max_issue_id => { max => 'issue_id' } } ] }
+ )->get_column('max_issue_id') )[0];
+ $new_issue_id++;
$issue_id = $new_issue_id;
}
+ $old_checkout_data->{issue_id} = $issue_id;
+ my $old_checkout = Koha::Old::Checkout->new($old_checkout_data)->store;
- $dbh->do(q|INSERT INTO old_issues SELECT * FROM issues WHERE issue_id = ?|, undef, $issue_id);
+ # Update the fines
+ $dbh->do(q|UPDATE accountlines SET issue_id = ? WHERE issue_id = ?|, undef, $old_checkout->issue_id, $issue->issue_id);
# anonymise patron checkout immediately if $privacy set to 2 and AnonymousPatron is set to a valid borrowernumber
if ( $privacy == 2) {
- $dbh->do(q|UPDATE old_issues SET borrowernumber=? WHERE issue_id = ?|, undef, $anonymouspatron, $issue_id);
+ $dbh->do(q|UPDATE old_issues SET borrowernumber=? WHERE issue_id = ?|, undef, $anonymouspatron, $old_checkout->issue_id);
}
- $dbh->do(q|DELETE FROM issues WHERE issue_id = ?|, undef, $issue_id);
+ # Delete the issue
+ $issue->delete;
ModItem( { 'onloan' => undef }, undef, $itemnumber );
my $dbh = C4::Context->dbh;
my $item = GetItem($itemnumber) or return;
- my $itemissue = GetItemIssue($itemnumber) or return;
+ my $itemissue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return;
- $borrowernumber ||= $itemissue->{borrowernumber};
+ $borrowernumber ||= $itemissue->borrowernumber;
my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
or return;
and $issuing_rule->norenewalbefore ne "" )
{
my $soonestrenewal =
- $itemissue->{date_due}->clone()
- ->subtract(
+ dt_from_string( $itemissue->date_due )->subtract(
$issuing_rule->lengthunit => $issuing_rule->norenewalbefore );
if ( C4::Context->preference('NoRenewalBeforePrecision') eq 'date'
my $dbh = C4::Context->dbh;
my $item = GetItem($itemnumber) or return;
- my $itemissue = GetItemIssue($itemnumber) or return;
+ my $itemissue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return;
- $borrowernumber ||= $itemissue->{borrowernumber};
+ $borrowernumber ||= $itemissue->borrowernumber;
my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
or return;
my $maximum_renewal_date;
if ( $issuing_rule->no_auto_renewal_after ) {
- $maximum_renewal_date = dt_from_string($itemissue->{issuedate});
+ $maximum_renewal_date = dt_from_string($itemissue->issuedate);
$maximum_renewal_date->add(
$issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after
);