Bug 14610 - Add and update modules
Signed-off-by: Jennifer Schmidt <jschmidt@switchinc.org> Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
parent
d2a4c32746
commit
bf1563e60b
|
|
@ -766,18 +766,19 @@ sub _parseletter_sth {
|
|||
# broke things for the rest of us. prepare_cached is a better
|
||||
# way to cache statement handles anyway.
|
||||
my $query =
|
||||
($table eq 'biblio' ) ? "SELECT * FROM $table WHERE biblionumber = ?" :
|
||||
($table eq 'biblioitems' ) ? "SELECT * FROM $table WHERE biblionumber = ?" :
|
||||
($table eq 'items' ) ? "SELECT * FROM $table WHERE itemnumber = ?" :
|
||||
($table eq 'issues' ) ? "SELECT * FROM $table WHERE itemnumber = ?" :
|
||||
($table eq 'old_issues' ) ? "SELECT * FROM $table WHERE itemnumber = ? ORDER BY timestamp DESC LIMIT 1" :
|
||||
($table eq 'reserves' ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" :
|
||||
($table eq 'borrowers' ) ? "SELECT * FROM $table WHERE borrowernumber = ?" :
|
||||
($table eq 'branches' ) ? "SELECT * FROM $table WHERE branchcode = ?" :
|
||||
($table eq 'suggestions' ) ? "SELECT * FROM $table WHERE suggestionid = ?" :
|
||||
($table eq 'aqbooksellers') ? "SELECT * FROM $table WHERE id = ?" :
|
||||
($table eq 'aqorders' ) ? "SELECT * FROM $table WHERE ordernumber = ?" :
|
||||
($table eq 'opac_news' ) ? "SELECT * FROM $table WHERE idnew = ?" :
|
||||
($table eq 'biblio' ) ? "SELECT * FROM $table WHERE biblionumber = ?" :
|
||||
($table eq 'biblioitems' ) ? "SELECT * FROM $table WHERE biblionumber = ?" :
|
||||
($table eq 'items' ) ? "SELECT * FROM $table WHERE itemnumber = ?" :
|
||||
($table eq 'issues' ) ? "SELECT * FROM $table WHERE itemnumber = ?" :
|
||||
($table eq 'old_issues' ) ? "SELECT * FROM $table WHERE itemnumber = ? ORDER BY timestamp DESC LIMIT 1" :
|
||||
($table eq 'reserves' ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" :
|
||||
($table eq 'borrowers' ) ? "SELECT * FROM $table WHERE borrowernumber = ?" :
|
||||
($table eq 'branches' ) ? "SELECT * FROM $table WHERE branchcode = ?" :
|
||||
($table eq 'suggestions' ) ? "SELECT * FROM $table WHERE suggestionid = ?" :
|
||||
($table eq 'aqbooksellers') ? "SELECT * FROM $table WHERE id = ?" :
|
||||
($table eq 'aqorders' ) ? "SELECT * FROM $table WHERE ordernumber = ?" :
|
||||
($table eq 'opac_news' ) ? "SELECT * FROM $table WHERE idnew = ?" :
|
||||
($table eq 'article_requests') ? "SELECT * FROM $table WHERE id = ?" :
|
||||
($table eq 'borrower_modifications') ? "SELECT * FROM $table WHERE verification_token = ?" :
|
||||
($table eq 'subscription') ? "SELECT * FROM $table WHERE subscriptionid = ?" :
|
||||
($table eq 'serial') ? "SELECT * FROM $table WHERE serialid = ?" :
|
||||
|
|
|
|||
|
|
@ -0,0 +1,223 @@
|
|||
package Koha::ArticleRequest;
|
||||
|
||||
# Copyright ByWater Solutions 2015
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 3 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with Koha; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
use Carp;
|
||||
|
||||
use Koha::Database;
|
||||
use Koha::Patrons;
|
||||
use Koha::Biblios;
|
||||
use Koha::Items;
|
||||
use Koha::Libraries;
|
||||
use Koha::ArticleRequest::Status;
|
||||
use Koha::DateUtils qw(dt_from_string);
|
||||
|
||||
use base qw(Koha::Object);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Koha::ArticleRequest - Koha Article Request Object class
|
||||
|
||||
=head1 API
|
||||
|
||||
=head2 Class Methods
|
||||
|
||||
=cut
|
||||
|
||||
=head3 open
|
||||
|
||||
=cut
|
||||
|
||||
sub open {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->status(Koha::ArticleRequest::Status::Pending);
|
||||
$self->notify();
|
||||
return $self;
|
||||
}
|
||||
|
||||
=head3 process
|
||||
|
||||
=cut
|
||||
|
||||
sub process {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->status(Koha::ArticleRequest::Status::Processing);
|
||||
$self->store();
|
||||
$self->notify();
|
||||
return $self;
|
||||
}
|
||||
|
||||
=head3 complete
|
||||
|
||||
=cut
|
||||
|
||||
sub complete {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->status(Koha::ArticleRequest::Status::Completed);
|
||||
$self->store();
|
||||
$self->notify();
|
||||
return $self;
|
||||
}
|
||||
|
||||
=head3 cancel
|
||||
|
||||
=cut
|
||||
|
||||
sub cancel {
|
||||
my ( $self, $notes ) = @_;
|
||||
|
||||
$self->status(Koha::ArticleRequest::Status::Canceled);
|
||||
$self->notes($notes) if $notes;
|
||||
$self->store();
|
||||
$self->notify();
|
||||
return $self;
|
||||
}
|
||||
|
||||
=head3 notify
|
||||
|
||||
=cut
|
||||
|
||||
sub notify {
|
||||
my ($self) = @_;
|
||||
|
||||
my $status = $self->status;
|
||||
|
||||
if (
|
||||
my $letter = C4::Letters::GetPreparedLetter(
|
||||
module => 'circulation',
|
||||
letter_code => "AR_$status",
|
||||
message_transport_type => 'email',
|
||||
tables => {
|
||||
article_requests => $self->id,
|
||||
borrowers => $self->borrowernumber,
|
||||
biblio => $self->biblionumber,
|
||||
biblioitems => $self->biblionumber,
|
||||
items => $self->itemnumber,
|
||||
branches => $self->branchcode,
|
||||
},
|
||||
)
|
||||
)
|
||||
{
|
||||
C4::Letters::EnqueueLetter(
|
||||
{
|
||||
letter => $letter,
|
||||
borrowernumber => $self->borrowernumber,
|
||||
message_transport_type => 'email',
|
||||
}
|
||||
) or warn "can't enqueue letter $letter";
|
||||
}
|
||||
}
|
||||
|
||||
=head3 biblio
|
||||
|
||||
Returns the Koha::Biblio object for this article request
|
||||
|
||||
=cut
|
||||
|
||||
sub biblio {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->{_biblio} ||= Koha::Biblios->find( $self->biblionumber() );
|
||||
|
||||
return $self->{_biblio};
|
||||
}
|
||||
|
||||
=head3 item
|
||||
|
||||
Returns the Koha::Item object for this article request
|
||||
|
||||
=cut
|
||||
|
||||
sub item {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->{_item} ||= Koha::Items->find( $self->itemnumber() );
|
||||
|
||||
return $self->{_item};
|
||||
}
|
||||
|
||||
=head3 borrower
|
||||
|
||||
Returns the Koha::Patron object for this article request
|
||||
|
||||
=cut
|
||||
|
||||
sub borrower {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->{_borrower} ||= Koha::Patrons->find( $self->borrowernumber() );
|
||||
|
||||
return $self->{_borrower};
|
||||
}
|
||||
|
||||
=head3 branch
|
||||
|
||||
Returns the Koha::Library object for this article request
|
||||
|
||||
=cut
|
||||
|
||||
sub branch {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->{_branch} ||= Koha::Libraries->find( $self->branchcode() );
|
||||
|
||||
return $self->{_branch};
|
||||
}
|
||||
|
||||
=head3 store
|
||||
|
||||
Override the default store behavior so that new opan requests
|
||||
will have notifications sent.
|
||||
|
||||
=cut
|
||||
|
||||
sub store {
|
||||
my ($self) = @_;
|
||||
|
||||
if ( $self->in_storage() ) {
|
||||
my $now = dt_from_string();
|
||||
$self->updated_on($now);
|
||||
|
||||
return $self->SUPER::store();
|
||||
}
|
||||
else {
|
||||
$self->open();
|
||||
return $self->SUPER::store();
|
||||
}
|
||||
}
|
||||
|
||||
=head3 _type
|
||||
|
||||
=cut
|
||||
|
||||
sub _type {
|
||||
return 'ArticleRequest';
|
||||
}
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kyle M Hall <kyle@bywatersolutions.com>
|
||||
|
||||
=cut
|
||||
|
||||
1;
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package Koha::ArticleRequest::Status;
|
||||
|
||||
# Copyright ByWater Solutions 2015
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 3 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with Koha; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
sub Pending {
|
||||
return 'PENDING';
|
||||
}
|
||||
|
||||
sub Processing {
|
||||
return 'PROCESSING';
|
||||
}
|
||||
|
||||
sub Completed {
|
||||
return 'COMPLETED';
|
||||
}
|
||||
|
||||
sub Canceled {
|
||||
return 'CANCELED';
|
||||
}
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kyle M Hall <kyle@bywatersolutions.com>
|
||||
|
||||
=cut
|
||||
|
||||
1;
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
package Koha::ArticleRequests;
|
||||
|
||||
# Copyright ByWater Solutions 2015
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 3 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with Koha; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
use Carp;
|
||||
|
||||
use Koha::Database;
|
||||
|
||||
use Koha::ArticleRequest;
|
||||
use Koha::ArticleRequest::Status;
|
||||
|
||||
use base qw(Koha::Objects);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Koha::ArticleRequests - Koha ArticleRequests Object class
|
||||
|
||||
=head1 API
|
||||
|
||||
=head2 Class Methods
|
||||
|
||||
=cut
|
||||
|
||||
=head3 pending
|
||||
|
||||
=cut
|
||||
|
||||
sub pending {
|
||||
my ( $self, $branchcode ) = @_;
|
||||
my $params = { status => Koha::ArticleRequest::Status::Pending };
|
||||
$params->{branchcode} = $branchcode if $branchcode;
|
||||
return Koha::ArticleRequests->search( $params );
|
||||
}
|
||||
|
||||
=head3 processing
|
||||
|
||||
=cut
|
||||
|
||||
sub processing {
|
||||
my ( $self, $branchcode ) = @_;
|
||||
my $params = { status => Koha::ArticleRequest::Status::Processing };
|
||||
$params->{branchcode} = $branchcode if $branchcode;
|
||||
return Koha::ArticleRequests->search( $params );
|
||||
}
|
||||
|
||||
=head3 completed
|
||||
|
||||
=cut
|
||||
|
||||
sub completed {
|
||||
my ( $self, $branchcode ) = @_;
|
||||
my $params = { status => Koha::ArticleRequest::Status::Completed };
|
||||
$params->{branchcode} = $branchcode if $branchcode;
|
||||
return Koha::ArticleRequests->search( $params );
|
||||
}
|
||||
|
||||
=head3 canceled
|
||||
|
||||
=cut
|
||||
|
||||
sub canceled {
|
||||
my ( $self, $branchcode ) = @_;
|
||||
my $params = { status => Koha::ArticleRequest::Status::Canceled };
|
||||
$params->{branchcode} = $branchcode if $branchcode;
|
||||
return Koha::ArticleRequests->search( $params );
|
||||
}
|
||||
|
||||
=head3 _type
|
||||
|
||||
=cut
|
||||
|
||||
sub _type {
|
||||
return 'ArticleRequest';
|
||||
}
|
||||
|
||||
sub object_class {
|
||||
return 'Koha::ArticleRequest';
|
||||
}
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kyle M Hall <kyle@bywatersolutions.com>
|
||||
|
||||
=cut
|
||||
|
||||
1;
|
||||
198
Koha/Biblio.pm
198
Koha/Biblio.pm
|
|
@ -27,6 +27,12 @@ use Koha::Database;
|
|||
|
||||
use base qw(Koha::Object);
|
||||
|
||||
use C4::Circulation qw(GetIssuingRule);
|
||||
use Koha::Items;
|
||||
use Koha::Biblioitems;
|
||||
use Koha::ArticleRequests;
|
||||
use Koha::ArticleRequest::Status;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Koha::Biblio - Koha Biblio Object class
|
||||
|
|
@ -53,8 +59,170 @@ sub subtitles {
|
|||
return map { $_->{subfield} } @{ GetRecordValue( 'subtitle', GetMarcBiblio( $self->id ), $self->frameworkcode ) };
|
||||
}
|
||||
|
||||
=head3 can_article_request
|
||||
|
||||
my $bool = $biblio->can_article_request( $borrower );
|
||||
|
||||
Returns true if article requests can be made for this record
|
||||
|
||||
$borrower must be a Koha::Patron object
|
||||
|
||||
=cut
|
||||
|
||||
sub can_article_request {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
my $rule = $self->article_request_type($borrower);
|
||||
return q{} if $rule eq 'item_only' && !$self->items()->count();
|
||||
return 1 if $rule && $rule ne 'no';
|
||||
|
||||
return q{};
|
||||
}
|
||||
|
||||
=head3 article_request_type
|
||||
|
||||
my $type = $biblio->article_request_type( $borrower );
|
||||
|
||||
Returns the article request type based on items, or on the record
|
||||
itself if there are no items.
|
||||
|
||||
$borrower must be a Koha::Patron object
|
||||
|
||||
=cut
|
||||
|
||||
sub article_request_type {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
return q{} unless $borrower;
|
||||
|
||||
my $rule = $self->article_request_type_for_items( $borrower );
|
||||
return $rule if $rule;
|
||||
|
||||
# If the record has no items that are requestable, go by the record itemtype
|
||||
$rule = $self->article_request_type_for_bib($borrower);
|
||||
return $rule if $rule;
|
||||
|
||||
return q{};
|
||||
}
|
||||
|
||||
=head3 article_request_type_for_bib
|
||||
|
||||
my $type = $biblio->article_request_type_for_bib
|
||||
|
||||
Returns the article request type 'yes', 'no', 'item_only', 'bib_only', for the given record
|
||||
|
||||
=cut
|
||||
|
||||
sub article_request_type_for_bib {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
return q{} unless $borrower;
|
||||
|
||||
my $borrowertype = $borrower->categorycode;
|
||||
my $itemtype = $self->itemtype();
|
||||
|
||||
my $rules = C4::Circulation::GetIssuingRule( $borrowertype, $itemtype );
|
||||
|
||||
return $rules->{article_requests} || q{};
|
||||
}
|
||||
|
||||
=head3 article_request_type_for_items
|
||||
|
||||
my $type = $biblio->article_request_type_for_items
|
||||
|
||||
Returns the article request type 'yes', 'no', 'item_only', 'bib_only', for the given record's items
|
||||
|
||||
If there is a conflict where some items are 'bib_only' and some are 'item_only', 'bib_only' will be returned.
|
||||
|
||||
=cut
|
||||
|
||||
sub article_request_type_for_items {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
my $counts;
|
||||
foreach my $item ( $self->items()->as_list() ) {
|
||||
my $rule = $item->article_request_type($borrower);
|
||||
return $rule if $rule eq 'bib_only'; # we don't need to go any further
|
||||
$counts->{$rule}++;
|
||||
}
|
||||
|
||||
return 'item_only' if $counts->{item_only};
|
||||
return 'yes' if $counts->{yes};
|
||||
return 'no' if $counts->{no};
|
||||
return q{};
|
||||
}
|
||||
|
||||
=head3 article_requests
|
||||
|
||||
my @requests = $biblio->article_requests
|
||||
|
||||
Returns the article requests associated with this Biblio
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
$self->{_article_requests} ||= Koha::ArticleRequests->search( { biblionumber => $self->biblionumber() } );
|
||||
|
||||
return wantarray ? $self->{_article_requests}->as_list : $self->{_article_requests};
|
||||
}
|
||||
|
||||
=head3 article_requests_current
|
||||
|
||||
my @requests = $biblio->article_requests_current
|
||||
|
||||
Returns the article requests associated with this Biblio that are incomplete
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests_current {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
$self->{_article_requests_current} ||= Koha::ArticleRequests->search(
|
||||
{
|
||||
biblionumber => $self->biblionumber(),
|
||||
-or => [
|
||||
{ status => Koha::ArticleRequest::Status::Pending },
|
||||
{ status => Koha::ArticleRequest::Status::Processing }
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
return wantarray ? $self->{_article_requests_current}->as_list : $self->{_article_requests_current};
|
||||
}
|
||||
|
||||
=head3 article_requests_finished
|
||||
|
||||
my @requests = $biblio->article_requests_finished
|
||||
|
||||
Returns the article requests associated with this Biblio that are completed
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests_finished {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
$self->{_article_requests_finished} ||= Koha::ArticleRequests->search(
|
||||
{
|
||||
biblionumber => $self->biblionumber(),
|
||||
-or => [
|
||||
{ status => Koha::ArticleRequest::Status::Completed },
|
||||
{ status => Koha::ArticleRequest::Status::Canceled }
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
return wantarray ? $self->{_article_requests_finished}->as_list : $self->{_article_requests_finished};
|
||||
}
|
||||
|
||||
=head3 items
|
||||
|
||||
=head3 items
|
||||
|
||||
my @items = $biblio->items();
|
||||
my $items = $biblio->items();
|
||||
|
||||
Returns the related Koha::Items object for this biblio in scalar context,
|
||||
or list of Koha::Item objects in list context.
|
||||
|
||||
|
|
@ -68,6 +236,36 @@ sub items {
|
|||
return wantarray ? $self->{_items}->as_list : $self->{_items};
|
||||
}
|
||||
|
||||
=head3 itemtype
|
||||
|
||||
my $itemtype = $biblio->itemtype();
|
||||
|
||||
Returns the itemtype for this record.
|
||||
|
||||
=cut
|
||||
|
||||
sub itemtype {
|
||||
my ( $self ) = @_;
|
||||
|
||||
return $self->_biblioitem()->itemtype();
|
||||
}
|
||||
|
||||
=head3 _biblioitem
|
||||
|
||||
my $field = $self->_biblioitem()->itemtype
|
||||
|
||||
Returns the related Koha::Biblioitem object for this Biblio object
|
||||
|
||||
=cut
|
||||
|
||||
sub _biblioitem {
|
||||
my ($self) = @_;
|
||||
|
||||
$self->{_biblioitem} ||= Koha::Biblioitems->find( { biblionumber => $self->biblionumber() } );
|
||||
|
||||
return $self->{_biblioitem};
|
||||
}
|
||||
|
||||
=head3 type
|
||||
|
||||
=cut
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package Koha::Biblios;
|
||||
|
||||
# Copyright ByWater Solutions 2014
|
||||
# Copyright ByWater Solutions 2015
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
|
|
|
|||
46
Koha/Item.pm
46
Koha/Item.pm
|
|
@ -23,6 +23,8 @@ use Carp;
|
|||
|
||||
use Koha::Database;
|
||||
|
||||
use C4::Context;
|
||||
use C4::Circulation qw(GetIssuingRule);
|
||||
use Koha::Item::Transfer;
|
||||
use Koha::Patrons;
|
||||
use Koha::Libraries;
|
||||
|
|
@ -123,6 +125,50 @@ sub last_returned_by {
|
|||
}
|
||||
}
|
||||
|
||||
=head3 can_article_request
|
||||
|
||||
my $bool = $item->can_article_request( $borrower )
|
||||
|
||||
Returns true if item can be specifically requested
|
||||
|
||||
$borrower must be a Koha::Patron object
|
||||
|
||||
=cut
|
||||
|
||||
sub can_article_request {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
my $rule = $self->article_request_type($borrower);
|
||||
|
||||
return 1 if $rule && $rule ne 'no' && $rule ne 'bib_only';
|
||||
return q{};
|
||||
}
|
||||
|
||||
=head3 article_request_type
|
||||
|
||||
my $type = $item->article_request_type( $borrower )
|
||||
|
||||
returns 'yes', 'no', 'bib_only', or 'item_only'
|
||||
|
||||
$borrower must be a Koha::Patron object
|
||||
|
||||
=cut
|
||||
|
||||
sub article_request_type {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
my $branch_control = C4::Context->preference('HomeOrHoldingBranch');
|
||||
my $branchcode =
|
||||
$branch_control eq 'homebranch' ? $self->homebranch
|
||||
: $branch_control eq 'holdingbranch' ? $self->holdingbranch
|
||||
: undef;
|
||||
my $borrowertype = $borrower->categorycode;
|
||||
my $itemtype = $self->effective_itemtype();
|
||||
my $rules = GetIssuingRule( $borrowertype, $itemtype, $branchcode );
|
||||
|
||||
return $rules->{article_requests} || q{};
|
||||
}
|
||||
|
||||
=head3 type
|
||||
|
||||
=cut
|
||||
|
|
|
|||
|
|
@ -359,6 +359,73 @@ sub move_to_deleted {
|
|||
return Koha::Database->new->schema->resultset('Deletedborrower')->create($patron_infos);
|
||||
}
|
||||
|
||||
=head3 article_requests
|
||||
|
||||
my @requests = $borrower->article_requests();
|
||||
my $requests = $borrower->article_requests();
|
||||
|
||||
Returns either a list of ArticleRequests objects,
|
||||
or an ArtitleRequests object, depending on the
|
||||
calling context.
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests {
|
||||
my ( $self ) = @_;
|
||||
|
||||
$self->{_article_requests} ||= Koha::ArticleRequests->search({ borrowernumber => $self->borrowernumber() });
|
||||
|
||||
return $self->{_article_requests};
|
||||
}
|
||||
|
||||
=head3 article_requests_current
|
||||
|
||||
my @requests = $patron->article_requests_current
|
||||
|
||||
Returns the article requests associated with this patron that are incomplete
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests_current {
|
||||
my ( $self ) = @_;
|
||||
|
||||
$self->{_article_requests_current} ||= Koha::ArticleRequests->search(
|
||||
{
|
||||
borrowernumber => $self->id(),
|
||||
-or => [
|
||||
{ status => Koha::ArticleRequest::Status::Pending },
|
||||
{ status => Koha::ArticleRequest::Status::Processing }
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
return $self->{_article_requests_current};
|
||||
}
|
||||
|
||||
=head3 article_requests_finished
|
||||
|
||||
my @requests = $biblio->article_requests_finished
|
||||
|
||||
Returns the article requests associated with this patron that are completed
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests_finished {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
$self->{_article_requests_finished} ||= Koha::ArticleRequests->search(
|
||||
{
|
||||
borrowernumber => $self->id(),
|
||||
-or => [
|
||||
{ status => Koha::ArticleRequest::Status::Completed },
|
||||
{ status => Koha::ArticleRequest::Status::Canceled }
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
return $self->{_article_requests_finished};
|
||||
}
|
||||
|
||||
=head3 type
|
||||
|
||||
=cut
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ use Carp;
|
|||
|
||||
use Koha::Database;
|
||||
|
||||
use Koha::ArticleRequests;
|
||||
use Koha::ArticleRequest::Status;
|
||||
use Koha::Patron;
|
||||
|
||||
use base qw(Koha::Objects);
|
||||
|
|
@ -67,6 +69,85 @@ sub search_housebound_deliverers {
|
|||
return Koha::Patrons->_new_from_dbic($del);
|
||||
}
|
||||
|
||||
=head3 guarantor
|
||||
|
||||
Returns a Koha::Patron object for this borrower's guarantor
|
||||
|
||||
=cut
|
||||
|
||||
sub guarantor {
|
||||
my ( $self ) = @_;
|
||||
|
||||
return Koha::Patrons->find( $self->guarantorid() );
|
||||
}
|
||||
|
||||
=head3 article_requests
|
||||
|
||||
my @requests = $borrower->article_requests();
|
||||
my $requests = $borrower->article_requests();
|
||||
|
||||
Returns either a list of ArticleRequests objects,
|
||||
or an ArtitleRequests object, depending on the
|
||||
calling context.
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests {
|
||||
my ( $self ) = @_;
|
||||
|
||||
$self->{_article_requests} ||= Koha::ArticleRequests->search({ borrowernumber => $self->borrowernumber() });
|
||||
|
||||
return $self->{_article_requests};
|
||||
}
|
||||
|
||||
=head3 article_requests_current
|
||||
|
||||
my @requests = $patron->article_requests_current
|
||||
|
||||
Returns the article requests associated with this patron that are incomplete
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests_current {
|
||||
my ( $self ) = @_;
|
||||
|
||||
$self->{_article_requests_current} ||= Koha::ArticleRequests->search(
|
||||
{
|
||||
borrowernumber => $self->id(),
|
||||
-or => [
|
||||
{ status => Koha::ArticleRequest::Status::Pending },
|
||||
{ status => Koha::ArticleRequest::Status::Processing }
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
return $self->{_article_requests_current};
|
||||
}
|
||||
|
||||
=head3 article_requests_finished
|
||||
|
||||
my @requests = $biblio->article_requests_finished
|
||||
|
||||
Returns the article requests associated with this patron that are completed
|
||||
|
||||
=cut
|
||||
|
||||
sub article_requests_finished {
|
||||
my ( $self, $borrower ) = @_;
|
||||
|
||||
$self->{_article_requests_finished} ||= Koha::ArticleRequests->search(
|
||||
{
|
||||
borrowernumber => $self->id(),
|
||||
-or => [
|
||||
{ status => Koha::ArticleRequest::Status::Completed },
|
||||
{ status => Koha::ArticleRequest::Status::Canceled }
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
return $self->{_article_requests_finished};
|
||||
}
|
||||
|
||||
=head3 type
|
||||
|
||||
=cut
|
||||
|
|
|
|||
|
|
@ -23,6 +23,10 @@ use Template::Plugin;
|
|||
use base qw( Template::Plugin );
|
||||
|
||||
use Koha::Holds;
|
||||
use Koha::Biblios;
|
||||
use Koha::Patrons;
|
||||
use Koha::ArticleRequests;
|
||||
use Koha::ArticleRequest::Status;
|
||||
|
||||
sub HoldsCount {
|
||||
my ( $self, $biblionumber ) = @_;
|
||||
|
|
@ -32,4 +36,31 @@ sub HoldsCount {
|
|||
return $holds->count();
|
||||
}
|
||||
|
||||
sub ArticleRequestsActiveCount {
|
||||
my ( $self, $biblionumber ) = @_;
|
||||
|
||||
my $ar = Koha::ArticleRequests->search(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
status => [
|
||||
-or => [
|
||||
status => Koha::ArticleRequest::Status::Pending,
|
||||
status => Koha::ArticleRequest::Status::Processing
|
||||
]
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
return $ar->count();
|
||||
}
|
||||
|
||||
sub CanArticleRequest {
|
||||
my ( $self, $biblionumber, $borrowernumber ) = @_;
|
||||
|
||||
my $biblio = Koha::Biblios->find( $biblionumber );
|
||||
my $borrower = Koha::Patrons->find( $borrowernumber );
|
||||
|
||||
return $biblio ? $biblio->can_article_request( $borrower ) : 0;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue