[Koha-patches] [PATCH] bug_7090: AllowItemsOnHoldCheckout syspref
Marc Balmer
marc at msys.ch
Wed Dec 21 14:21:12 CET 2011
Am 21.12.11 09:29, schrieb Srdjan Jankovic:
> 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
Please don't use backquotes around the table name. They are not needed
and in fact lead to a syntax error in PostgreSQL.
Granted, this is part of the MySQL installation procedure, but don't
make it harder than needed to shared code with PostgreSQL.
> 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;
> }
More information about the Koha-patches
mailing list