C4::Circulation::GetItemIssue returned all the issue and item
informations for a given issue. Moveover it also did some date
manipulations. Most of the time this subroutine was called, there
additional information were useless as the caller usually just needed
the basic issue's infos 'from the issue table).
This first patch updates the simple calls, ie. the ones that just need
the issue's infomations.
Test plan:
The following operations should success:
- transfer a book
- create a rule for on-site checkouts and confirm that a patron cannot
check more items out that it's defined in the rule.
- Renew an issue using ILSDI
- Using SIP confirm that you are able to see your issues
Followed test plan, works as expected
Signed-off-by: Marc VĂ©ron <veron@veron.ch>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
my $messages;
my $dotransfer = 1;
my $itemnumber = GetItemnumberFromBarcode( $barcode );
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..
my $biblio = GetBiblioFromItemNumber($itemnumber);
# bad barcode..
}
# check if it is still issued to someone, return it...
}
# check if it is still issued to someone, return it...
- if ($issue->{borrowernumber}) {
AddReturn( $barcode, $fbr );
AddReturn( $barcode, $fbr );
- $messages->{'WasReturned'} = $issue->{borrowernumber};
+ $messages->{'WasReturned'} = $issue->borrowernumber;
my $override_high_holds = $params->{override_high_holds} || 0;
my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
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 $biblioitem = GetBiblioItemData($item->{biblioitemnumber});
$item->{'itemtype'}=$item->{'itype'};
my $dbh = C4::Context->dbh;
#
my $switch_onsite_checkout = (
C4::Context->preference('SwitchOnSiteCheckouts')
#
my $switch_onsite_checkout = (
C4::Context->preference('SwitchOnSiteCheckouts')
- and $issue->{onsite_checkout}
- 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 ) {
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
#
#
# 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
# 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 {
and C4::Context->preference('SwitchOnSiteCheckouts') ) {
$messages{ONSITE_CHECKOUT_WILL_BE_SWITCHED} = 1;
} else {
- elsif ($issue->{borrowernumber}) {
- 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 ( $can_be_returned, $message ) = CanBookBeReturned( $item, C4::Context->userenv->{branch} );
my $branch = _GetCircControlBranch( $item, $borrower );
# get actual issuing if there is one
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.
# 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'},
and not $switch_onsite_checkout ) {
$datedue = AddRenewal(
$borrower->{'borrowernumber'},
}
else {
# it's NOT a renewal
}
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} );
# 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} );
my $dbh = C4::Context->dbh;
my $item = GetItem($itemnumber) or return;
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 $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
or return;
and $issuing_rule->norenewalbefore ne "" )
{
my $soonestrenewal =
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'
$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 $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 $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
or return;
my $maximum_renewal_date;
if ( $issuing_rule->no_auto_renewal_after ) {
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
);
$maximum_renewal_date->add(
$issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after
);
use DateTime;
use C4::Auth;
use C4::Members::Attributes qw(GetBorrowerAttributes);
use DateTime;
use C4::Auth;
use C4::Members::Attributes qw(GetBorrowerAttributes);
use Koha::Libraries;
use Koha::Patrons;
use Koha::Libraries;
use Koha::Patrons;
my @renewal = CanBookBeRenewed( $borrowernumber, $itemnumber );
if ( $renewal[0] ) { AddRenewal( $borrowernumber, $itemnumber ); }
my @renewal = CanBookBeRenewed( $borrowernumber, $itemnumber );
if ( $renewal[0] ) { AddRenewal( $borrowernumber, $itemnumber ); }
- my $issue = GetItemIssue($itemnumber);
+ my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return; # FIXME should be handled
# Hashref building
my $out;
# Hashref building
my $out;
- $out->{'renewals'} = $issue->{'renewals'};
- $out->{date_due} = $issue->{date_due}->strftime('%Y-%m-%d %H:%S');
+ $out->{'renewals'} = $issue->renewals;
+ $out->{date_due} = dt_from_string($issue->date_due)->strftime('%Y-%m-%d %H:%S');
$out->{'success'} = $renewal[0];
$out->{'error'} = $renewal[1];
$out->{'success'} = $renewal[0];
$out->{'error'} = $renewal[1];
use C4::Reserves;
use Koha::Database;
use Koha::Biblios;
use C4::Reserves;
use Koha::Database;
use Koha::Biblios;
use Koha::Patrons;
=encoding UTF-8
use Koha::Patrons;
=encoding UTF-8
$item->{sip_media_type} = $itemtype->sip_media_type() if $itemtype;
# check if its on issue and if so get the borrower
$item->{sip_media_type} = $itemtype->sip_media_type() if $itemtype;
# check if its on issue and if so get the borrower
- my $issue = GetItemIssue($item->{'itemnumber'});
+ my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
- $item->{due_date} = $issue->{date_due};
+ $item->{due_date} = dt_from_string( $issue->date_due, 'sql' )->truncate( to => 'minute' );
- my $borrower = GetMember(borrowernumber=>$issue->{'borrowernumber'});
+ my $borrower = $issue ? GetMember( borrowernumber => $issue->borrowernumber ) : {};
$item->{patron} = $borrower->{'cardnumber'};
my $biblio = Koha::Biblios->find( $item->{biblionumber } );
my $holds = $biblio->current_holds->unblessed;
$item->{patron} = $borrower->{'cardnumber'};
my $biblio = Koha::Biblios->find( $item->{biblionumber } );
my $holds = $biblio->current_holds->unblessed;
use strict;
use warnings;
use C4::Context;
use strict;
use warnings;
use C4::Context;
-use C4::Circulation qw( GetItemIssue );
} # renew from AddIssue ??
else {
# need to reread the issue to get due date
} # renew from AddIssue ??
else {
# need to reread the issue to get due date
- $iss = GetItemIssue($itemnum);
- if ($iss && $iss->{date_due} ) {
- $due_dt = dt_from_string( $iss->{date_due} );
+ $iss = Koha::Checkouts->find( { itemnumber => $itemnum } );
+ if ($iss && $iss->date_due ) {
+ $due_dt = dt_from_string( $iss->date_due, 'sql' );
use C4::Members;
use C4::Stats;
use Koha::UploadedFiles;
use C4::Members;
use C4::Stats;
use Koha::UploadedFiles;
+use Koha::Checkouts;
+use Koha::Upload;
use Date::Calc qw( Add_Delta_Days Date_to_Days );
use Date::Calc qw( Add_Delta_Days Date_to_Days );
my $item = GetBiblioFromItemNumber( undef, $barcode );
return unless $item->{'itemnumber'};
my $item = GetBiblioFromItemNumber( undef, $barcode );
return unless $item->{'itemnumber'};
- my $issue = C4::Circulation::GetItemIssue( $item->{'itemnumber'} );
- return unless $issue->{'borrowernumber'};
- return $issue->{'borrowernumber'};
+ my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
+ return unless $issue;
+ return $issue->borrowernumber;
use C4::BackgroundJob;
use Koha::UploadedFiles;
use Koha::Account;
use C4::BackgroundJob;
use Koha::UploadedFiles;
use Koha::Account;
use Koha::Patrons;
use Date::Calc qw( Add_Delta_Days Date_to_Days );
use Koha::Patrons;
use Date::Calc qw( Add_Delta_Days Date_to_Days );
my $branchcode = C4::Context->userenv->{branch};
my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } );
my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } );
my $branchcode = C4::Context->userenv->{branch};
my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } );
my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } );
- my $issue = GetItemIssue( $item->{'itemnumber'} );
+ my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
- if ( $issue->{ 'date_due' } ) { ## Item is currently checked out to another person.
+ if ( $issue ) { ## Item is currently checked out to another person.
#warn "Item Currently Issued.";
#warn "Item Currently Issued.";
- my $issue = GetOpenIssue( $item->{'itemnumber'} );
+ my $issue = GetOpenIssue( $item->{'itemnumber'} ); # FIXME Hum? That does not make sense, if it's in the issue table, the issue is open (i.e. returndate is null)
if ( $issue->{'borrowernumber'} eq $borrower->{'borrowernumber'} ) { ## Issued to this person already, renew it.
#warn "Item issued to this member already, renewing.";
if ( $issue->{'borrowernumber'} eq $borrower->{'borrowernumber'} ) { ## Issued to this person already, renew it.
#warn "Item issued to this member already, renewing.";
my $item = GetBiblioFromItemNumber( undef, $barcode );
return unless $item->{'itemnumber'};
my $item = GetBiblioFromItemNumber( undef, $barcode );
return unless $item->{'itemnumber'};
- my $issue = C4::Circulation::GetItemIssue( $item->{'itemnumber'} );
- return unless $issue->{'borrowernumber'};
- return $issue->{'borrowernumber'};
+ my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
+ return unless $issue;
+ return $issue->borrowernumber;
use Koha::DateUtils;
use Koha::Items;
use Koha::ItemTypes;
use Koha::DateUtils;
use Koha::Items;
use Koha::ItemTypes;
use Koha::Libraries;
use Koha::Patrons;
use Date::Calc qw/Today Date_to_Days/;
use Koha::Libraries;
use Koha::Patrons;
use Date::Calc qw/Today Date_to_Days/;
# If the item is currently on loan, we display its return date and
# change the background color.
# If the item is currently on loan, we display its return date and
# change the background color.
- my $issues= GetItemIssue($itemNum);
- if ( $issues->{'date_due'} ) {
- $itemLoopIter->{dateDue} = output_pref({ dt => dt_from_string($issues->{date_due}, 'sql'), as_due_date => 1 });
+ my $issue = Koha::Checkouts->find( { itemnumber => $itemNum } );
+ if ( $issue ) {
+ $itemLoopIter->{dateDue} = output_pref({ dt => dt_from_string($issue->date_due, 'sql'), as_due_date => 1 });
$itemLoopIter->{backgroundcolor} = 'onloan';
}
$itemLoopIter->{backgroundcolor} = 'onloan';
}
use C4::Members;
use C4::Search; # enabled_staff_search_views
use Koha::DateUtils;
use C4::Members;
use C4::Search; # enabled_staff_search_views
use Koha::DateUtils;
use Koha::Holds;
use Koha::Items;
use Koha::ItemTypes;
use Koha::Holds;
use Koha::Items;
use Koha::ItemTypes;
# if the item is currently on loan, we display its return date and
# change the background color
# if the item is currently on loan, we display its return date and
# change the background color
- my $issues= GetItemIssue($itemnumber);
- if ( $issues->{'date_due'} ) {
- $item->{date_due} = $issues->{date_due_sql};
+ my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } );
+ if ( $issue ) {
+ $item->{date_due} = $issue->date_due;
$item->{backgroundcolor} = 'onloan';
}
$item->{backgroundcolor} = 'onloan';
}
use Koha::DateUtils;
use Koha::Database;
use Koha::IssuingRules;
use Koha::DateUtils;
use Koha::Database;
use Koha::IssuingRules;
use Koha::Subscriptions;
my $schema = Koha::Database->schema;
use Koha::Subscriptions;
my $schema = Koha::Database->schema;
is (defined $issue2, 1, "Item 2 checked out, due date: " . $issue2->date_due());
is (defined $issue2, 1, "Item 2 checked out, due date: " . $issue2->date_due());
- my $borrowing_borrowernumber = GetItemIssue($itemnumber)->{borrowernumber};
+ my $borrowing_borrowernumber = Koha::Checkouts->find( { itemnumber => $itemnumber } )->borrowernumber;
is ($borrowing_borrowernumber, $renewing_borrowernumber, "Item checked out to $renewing_borrower->{firstname} $renewing_borrower->{surname}");
my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber, 1);
is ($borrowing_borrowernumber, $renewing_borrowernumber, "Item checked out to $renewing_borrower->{firstname} $renewing_borrower->{surname}");
my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber, 1);
my $issue = AddIssue( $renewing_borrower, $barcode1);
my $datedue = dt_from_string( $issue->date_due() );
is (defined $issue->date_due(), 1, "item 1 checked out");
my $issue = AddIssue( $renewing_borrower, $barcode1);
my $datedue = dt_from_string( $issue->date_due() );
is (defined $issue->date_due(), 1, "item 1 checked out");
- my $borrowing_borrowernumber = GetItemIssue($itemnumber1)->{borrowernumber};
+ my $borrowing_borrowernumber = Koha::Checkouts->find({ itemnumber => $itemnumber1 })->borrowernumber;
my %reserving_borrower_data1 = (
firstname => 'Katrin',
my %reserving_borrower_data1 = (
firstname => 'Katrin',
use Koha::DateUtils qw( dt_from_string );
use Koha::Database;
use Koha::DateUtils qw( dt_from_string );
use Koha::Database;
use t::lib::TestBuilder;
use t::lib::Mocks;
use t::lib::TestBuilder;
use t::lib::Mocks;
is( $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED}, 1, 'If SwitchOnSiteCheckouts, switch the on-site checkout' );
is( exists $impossible->{TOO_MANY}, '', 'If SwitchOnSiteCheckouts, switch the on-site checkout' );
C4::Circulation::AddIssue( $patron, $item->{barcode}, undef, undef, undef, undef, { switch_onsite_checkout => 1 } );
is( $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED}, 1, 'If SwitchOnSiteCheckouts, switch the on-site checkout' );
is( exists $impossible->{TOO_MANY}, '', 'If SwitchOnSiteCheckouts, switch the on-site checkout' );
C4::Circulation::AddIssue( $patron, $item->{barcode}, undef, undef, undef, undef, { switch_onsite_checkout => 1 } );
-my $issue = C4::Circulation::GetItemIssue( $item->{itemnumber} );
-is( $issue->{onsite_checkout}, 0, 'The issue should have been switched to a regular checkout' );
+my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
+is( $issue->onsite_checkout, 0, 'The issue should have been switched to a regular checkout' );
my $five_days_after = dt_from_string->add( days => 5 )->set( hour => 23, minute => 59, second => 0 );
my $five_days_after = dt_from_string->add( days => 5 )->set( hour => 23, minute => 59, second => 0 );
-is( $issue->{date_due}, $five_days_after, 'The date_due should have been set depending on the circ rules when the on-site checkout has been switched' );
+is( dt_from_string($issue->date_due, 'sql'), $five_days_after, 'The date_due should have been set depending on the circ rules when the on-site checkout has been switched' );
# Specific case
t::lib::Mocks::mock_preference('ConsiderOnSiteCheckoutsAsNormalCheckouts', 1);
# Specific case
t::lib::Mocks::mock_preference('ConsiderOnSiteCheckoutsAsNormalCheckouts', 1);
-use Test::More tests => 33;
+use Test::More tests => 32;
use DateTime::Duration;
use t::lib::Mocks;
use DateTime::Duration;
use t::lib::Mocks;
AddReturn
GetBiblioIssues
GetIssuingCharges
AddReturn
GetBiblioIssues
GetIssuingCharges
GetOpenIssue
GetRenewCount
GetUpcomingDueIssues
GetOpenIssue
GetRenewCount
GetUpcomingDueIssues
#Test GetBiblioIssues
is( GetBiblioIssues(), undef, "GetBiblio Issues without parameters" );
#Test GetBiblioIssues
is( GetBiblioIssues(), undef, "GetBiblio Issues without parameters" );
-#Test GetItemIssue
-#FIXME : As the issues are not correctly added in the database, these tests don't work correctly
-is(GetItemIssue,undef,"Without parameter GetItemIssue returns undef");
-#is(GetItemIssue($item_id1),{},"Item1's issues");
-
#Test GetOpenIssue
is( GetOpenIssue(), undef, "Without parameter GetOpenIssue returns undef" );
is( GetOpenIssue(-1), undef,
#Test GetOpenIssue
is( GetOpenIssue(), undef, "Without parameter GetOpenIssue returns undef" );
is( GetOpenIssue(-1), undef,