From e5282e5b7afd78fb512582afc4eb0b7cb69ea016 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 11 Mar 2022 13:32:20 +0000 Subject: [PATCH] Bug 30275: Add Koha::Objects for Renewals Add Koha::Checkouts::Renewals|Renewal classes Signed-off-by: Owen Leonard Signed-off-by: Tomas Cohen Arazi --- Koha/Checkouts/Renewal.pm | 135 ++++++++++++++++++++++++++ Koha/Checkouts/Renewals.pm | 61 ++++++++++++ Koha/Exceptions/Checkouts/Renewals.pm | 49 ++++++++++ 3 files changed, 245 insertions(+) create mode 100644 Koha/Checkouts/Renewal.pm create mode 100644 Koha/Checkouts/Renewals.pm create mode 100644 Koha/Exceptions/Checkouts/Renewals.pm diff --git a/Koha/Checkouts/Renewal.pm b/Koha/Checkouts/Renewal.pm new file mode 100644 index 0000000000..e8a513d650 --- /dev/null +++ b/Koha/Checkouts/Renewal.pm @@ -0,0 +1,135 @@ +package Koha::Checkouts::Renewal; + +# Copyright PTFS Europe 2022 +# +# 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, see . + +use Modern::Perl; + +use base qw(Koha::Object); + +use Koha::Checkout; +use Koha::Checkouts; +use Koha::Exceptions; +use Koha::Exceptions::Checkouts::Renewals; +use Koha::Old::Checkouts; +use Koha::Patron; + +=head1 NAME + +Koha::Checkouts::Renewal - Koha Renewal object class + +=head1 API + +=head2 Class methods + +=cut + +=head3 store + + my $return_claim = Koha::Checkout::Renewal->new($args)->store; + +Overloaded I method that validates the attributes and raises relevant +exceptions as needed. + +=cut + +sub store { + my ( $self ) = @_; + + unless ( $self->in_storage || $self->renewer_id ) { + Koha::Exceptions::Checkouts::Renewals::NoRenewerID->throw(); + } + + unless ( ( !$self->issue_id && $self->in_storage ) + || Koha::Checkouts->find( $self->issue_id ) + || Koha::Old::Checkouts->find( $self->issue_id ) ) + { + Koha::Exceptions::Object::FKConstraint->throw( + error => 'Broken FK constraint', + broken_fk => 'issue_id' + ); + } + + return $self->SUPER::store; +} + +=head3 checkout + +=cut + +sub checkout { + my ($self) = @_; + + my $checkout_rs = $self->_result->checkout; + return unless $checkout_rs; + return Koha::Checkout->_new_from_dbic($checkout_rs); +} + +=head3 old_checkout + +=cut + +sub old_checkout { + my ($self) = @_; + + my $old_checkout_rs = $self->_result->old_checkout; + return unless $old_checkout_rs; + return Koha::Old::Checkout->_new_from_dbic($old_checkout_rs); +} + +=head3 renewer + +=cut + +sub renewer { + my ( $self ) = @_; + + my $renewer = $self->_result->renewer; + return Koha::Patron->_new_from_dbic( $renewer ) if $renewer; +} + +=head3 to_api_mapping + +This method returns the mapping for representing a Koha::Checkouts::Renewal object +on the API. + +=cut + +sub to_api_mapping { + return { + id => 'renewal_id', + issue_id => 'checkout_id' + }; +} + +=head2 Internal methods + +=head3 _type + +=cut + +sub _type { + return 'CheckoutRenewal'; +} + +=head1 AUTHOR + +Martin Renvoize + +=cut + +1; diff --git a/Koha/Checkouts/Renewals.pm b/Koha/Checkouts/Renewals.pm new file mode 100644 index 0000000000..5ec654fa8e --- /dev/null +++ b/Koha/Checkouts/Renewals.pm @@ -0,0 +1,61 @@ +package Koha::Checkouts::Renewals; + +# Copyright PTFS Europe 2022 +# +# This file is part of oha. +# +# oha 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. +# +# oha 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 oha; if not, see . + +use Modern::Perl; + + +use Koha::Database; + +use Koha::Checkouts::Renewal; + +use base qw(Koha::Objects); + +=head1 NAME + +Koha::Checkouts::Renewals - Koha Renewal object set class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 type + +=cut + +sub _type { + return 'CheckoutRenewal'; +} + +=head3 object_class + +=cut + +sub object_class { + return 'Koha::Checkouts::Renewal'; +} + +=head1 AUTHOR + +Martin Renvoize + +=cut + +1; diff --git a/Koha/Exceptions/Checkouts/Renewals.pm b/Koha/Exceptions/Checkouts/Renewals.pm new file mode 100644 index 0000000000..93ca7373d6 --- /dev/null +++ b/Koha/Exceptions/Checkouts/Renewals.pm @@ -0,0 +1,49 @@ +package Koha::Exceptions::Checkouts::Renewals; + +# 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, see . + +use Modern::Perl; + +use Koha::Exception; + +use Exception::Class ( + 'Koha::Exceptions::Checkouts::Renewals' => { + isa => 'Koha::Exception', + }, + 'Koha::Exceptions::Checkouts::Renewals::NoRenewerID' => { + isa => 'Koha::Exceptions::Checkouts::Renewals', + description => 'renewer_id is mandatory' + }, +); + +=head1 NAME + +Koha::Exceptions::Checkouts - Base class for Checkouts exceptions + +=head1 Exceptions + +=head2 Koha::Exceptions::Checkouts::Renewals + +Generic return claim exception + +=head2 Koha::Exceptions::Checkouts::Renewals::NoRenewerID + +Exception to be used when a renewal is requested to be store but +the 'renewer_id' param is not passed. + +=cut + +1; -- 2.20.1