[Patches] [PATCH] bug_7090: AllowItemsOnHoldCheckout syspref
koha-patchbot at kohaaloha.com
koha-patchbot at kohaaloha.com
Wed Dec 21 21:35:03 NZDT 2011
From: Srdjan Jankovic <srdjan at catalyst.net.nz>
Date: Wed, 21 Dec 2011 21:26:30 +1300
Subject: [PATCH] bug_7090: AllowItemsOnHoldCheckout syspref
Observe AllowItemsOnHandCheckout syspref when using self checkout
---
C4/Circulation.pm | 68 ++++++++++---------
C4/SIP/ILS/Transaction/Checkout.pm | 8 ++-
installer/data/mysql/sysprefs.sql | 2 +-
installer/data/mysql/updatedatabase.pl | 7 ++
.../en/modules/admin/preferences/circulation.pref | 6 ++
opac/sco/sco-main.pl | 16 ++++-
6 files changed, 71 insertions(+), 36 deletions(-)
diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index 9a6f4f2..5b03b37 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -570,7 +570,7 @@ sub itemissues {
=head2 CanBookBeIssued
( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $borrower,
- $barcode, $duedatespec, $inprocess );
+ $barcode, $duedatespec, $inprocess, $ignore_reserves );
Check if a book can be issued.
@@ -584,7 +584,8 @@ C<$issuingimpossible> and C<$needsconfirmation> are some hashref.
=item C<$duedatespec> is a C4::Dates object.
-=item C<$inprocess>
+=item C<$inprocess> boolean switch
+=item C<$ignore_reserves> boolean switch
=back
@@ -661,7 +662,7 @@ if the borrower borrows to much things
=cut
sub CanBookBeIssued {
- my ( $borrower, $barcode, $duedate, $inprocess ) = @_;
+ my ( $borrower, $barcode, $duedate, $inprocess, $ignore_reserves ) = @_;
my %needsconfirmation; # filled with problems that needs confirmations
my %issuingimpossible; # filled with problems that causes the issue to be IMPOSSIBLE
my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
@@ -868,37 +869,40 @@ sub CanBookBeIssued {
$needsconfirmation{issued_borrowernumber} = $currborinfo->{'borrowernumber'};
}
- # See if the item is on reserve.
- my ( $restype, $res, undef ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
- if ($restype) {
- my $resbor = $res->{'borrowernumber'};
- my ( $resborrower ) = C4::Members::GetMember( borrowernumber => $resbor );
- my $branches = GetBranches();
- my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'};
- if ( $resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting" )
- {
- # The item is on reserve and waiting, but has been
- # reserved by some other patron.
- $needsconfirmation{RESERVE_WAITING} = 1;
- $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
- $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
- $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
- $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
- $needsconfirmation{'resbranchname'} = $branchname;
- $needsconfirmation{'reswaitingdate'} = format_date($res->{'waitingdate'});
- }
- elsif ( $restype eq "Reserved" ) {
- # The item is on reserve for someone else.
- $needsconfirmation{RESERVED} = 1;
- $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
- $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
- $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
- $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
- $needsconfirmation{'resbranchname'} = $branchname;
- $needsconfirmation{'resreservedate'} = format_date($res->{'reservedate'});
+ unless ( $ignore_reserves ) {
+ # See if the item is on reserve.
+ my ( $restype, $res ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+ if ($restype) {
+ my $resbor = $res->{'borrowernumber'};
+ if ( $resbor ne $borrower->{'borrowernumber'} ) {
+ my ( $resborrower ) = C4::Members::GetMember( borrowernumber => $resbor );
+ my $branchname = GetBranchName( $res->{'branchcode'} );
+ if ( $restype eq "Waiting" )
+ {
+ # The item is on reserve and waiting, but has been
+ # reserved by some other patron.
+ $needsconfirmation{RESERVE_WAITING} = 1;
+ $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
+ $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
+ $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
+ $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
+ $needsconfirmation{'resbranchname'} = $branchname;
+ $needsconfirmation{'reswaitingdate'} = format_date($res->{'waitingdate'});
+ }
+ elsif ( $restype eq "Reserved" ) {
+ # The item is on reserve for someone else.
+ $needsconfirmation{RESERVED} = 1;
+ $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
+ $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
+ $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
+ $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
+ $needsconfirmation{'resbranchname'} = $branchname;
+ $needsconfirmation{'resreservedate'} = format_date($res->{'reservedate'});
+ }
+ }
}
}
- return ( \%issuingimpossible, \%needsconfirmation );
+ return ( \%issuingimpossible, \%needsconfirmation );
}
=head2 AddIssue
diff --git a/C4/SIP/ILS/Transaction/Checkout.pm b/C4/SIP/ILS/Transaction/Checkout.pm
index 8a14877..617a4eb 100644
--- a/C4/SIP/ILS/Transaction/Checkout.pm
+++ b/C4/SIP/ILS/Transaction/Checkout.pm
@@ -58,7 +58,13 @@ sub do_checkout {
$debug and warn "do_checkout: patron (" . $patron_barcode . ")";
my $borrower = $self->{patron}->getmemberdetails_object();
$debug and warn "do_checkout borrower: . " . Dumper $borrower;
- my ($issuingimpossible,$needsconfirmation) = CanBookBeIssued( $borrower, $barcode );
+ my ($issuingimpossible,$needsconfirmation) = CanBookBeIssued(
+ $borrower,
+ $barcode,
+ undef,
+ 0,
+ C4::Context->preference("AllowItemsOnHoldCheckout")
+ );
my $noerror=1;
if (scalar keys %$issuingimpossible) {
foreach (keys %$issuingimpossible) {
diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql
index 128c9b2..ca82713 100755
--- a/installer/data/mysql/sysprefs.sql
+++ b/installer/data/mysql/sysprefs.sql
@@ -328,4 +328,4 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OpacKohaUrl','1',"Show 'Powered by Koha' text on OPAC footer.",NULL,NULL);
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('EasyAnalyticalRecords','0','If on, display in the catalogue screens tools to easily setup analytical record relationships','','YesNo');
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacShowRecentComments',0,'If ON a link to recent comments will appear in the OPAC masthead',NULL,'YesNo');
-
+INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('AllowItemsOnHoldCheckout',0,'Do not generate RESERVE_WAITING and RESERVED warning when checking out items reserved to someone else. This allows self checkouts for those items.','','YesNo');
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 0063a75..242f868 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -4578,6 +4578,13 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
SetVersion($DBversion);
}
+$DBversion = "3.06.02.XXX";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+ $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('AllowItemsOnHoldCheckout',0,'Do not generate RESERVE_WAITING and RESERVED warning when checking out items reserved to someone else. This allows self checkouts for those items.','','YesNo')");
+ print "Upgrade to $DBversion add 'AllowItemsOnHoldCheckout' syspref \n";
+ SetVersion ($DBversion);
+}
+
=head1 FUNCTIONS
=head2 DropAllForeignKeys($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
index f4946b5..f4fd721 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
@@ -105,6 +105,12 @@ Circulation:
no: "Don't allow"
- staff to manually override the renewal limit and renew a checkout when it would go over the renewal limit.
-
+ - pref: AllowItemsOnHoldCheckout
+ choices:
+ yes: Allow
+ no: "Don't allow"
+ - checkouts of items items reserved to someone else. If allowed do not generate RESERVE_WAITING and RESERVED warning. This allows self checkouts for those items.
+ -
- pref: AllFinesNeedOverride
choices:
yes: Require
diff --git a/opac/sco/sco-main.pl b/opac/sco/sco-main.pl
index a1a3ce6..7e4f810 100755
--- a/opac/sco/sco-main.pl
+++ b/opac/sco/sco-main.pl
@@ -132,7 +132,13 @@ elsif ( $op eq "checkout" ) {
my $impossible = {};
my $needconfirm = {};
if ( !$confirmed ) {
- ( $impossible, $needconfirm ) = CanBookBeIssued( $borrower, $barcode );
+ ( $impossible, $needconfirm ) = CanBookBeIssuedCheckout(
+ $borrower,
+ $barcode,
+ undef,
+ 0,
+ C4::Context->preference("AllowItemsOnHoldCheckout")
+ );
}
$confirm_required = scalar keys %$needconfirm;
@@ -213,7 +219,13 @@ if ($borrower->{cardnumber}) {
my ($issueslist) = GetPendingIssues( $borrower->{'borrowernumber'} );
foreach my $it (@$issueslist) {
$it->{date_due_display} = format_date($it->{date_due});
- my ($renewokay, $renewerror) = CanBookBeIssued($borrower, $it->{'barcode'},'','');
+ my ($renewokay, $renewerror) = CanBookBeIssued(
+ $borrower,
+ $it->{'barcode'},
+ undef,
+ 0,
+ C4::Context->preference("AllowItemsOnHoldCheckout")
+ );
$it->{'norenew'} = 1 if $renewokay->{'NO_MORE_RENEWALS'};
push @issues, $it;
}
--
1.6.5
More information about the Patches
mailing list