Koha/Koha/CirculationRule.pm
Jonathan Druart 68216c541b
Bug 32894: Remove wrong caching from Koha:: methods - simple
In some of our Koha:: objects we have methods that cache their result and return it in subsequent calls. However there is no invalidation of the cache if the object is modified.

For instance, in Koha/ArticleRequest.pm

sub biblio {
    my ($self) = @_;

    $self->{_biblio} ||= Koha::Biblios->find( $self->biblionumber() );

    return $self->{_biblio};
}

This pattern exists in several places.

It can lead to confusion and incorrect results, such as:

use Koha::ArticleRequests;
my $ar = Koha::ArticleRequest->new({
    borrowernumber => 42,
    biblionumber => 42,
})->store;
say $ar->biblio->biblionumber;               # Display 42, correct
$ar->set({ biblionumber => 24 })->store;
say $ar->biblio->biblionumber;               # Display 42, wrong
$ar->discard_changes;
say $ar->biblio->biblionumber;               # Display 42, wrong
$ar->delete;

We should remove those caching and rely on DBIC/DBMS caching mechanism instead.

This patch is adjusting the trivial occurrences

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2023-06-07 16:44:03 -03:00

94 lines
1.8 KiB
Perl

package Koha::CirculationRule;
# Copyright Vaara-kirjastot 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, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use base qw(Koha::Object);
use Koha::Libraries;
use Koha::Patron::Categories;
use Koha::ItemTypes;
=head1 NAME
Koha::CirculationRule - Koha CirculationRule object class
=head1 API
=head2 Class Methods
=cut
=head3 library
=cut
sub library {
my ($self) = @_;
my $rs = $self->_result->branchcode;
return unless $rs;
return Koha::Library->_new_from_dbic($rs);
}
=head3 patron_category
=cut
sub patron_category {
my ($self) = @_;
my $rs = $self->_result->categorycode;
return unless $rs;
return Koha::Patron::Category->_new_from_dbic($rs);
}
=head3 item_type
=cut
sub item_type {
my ($self) = @_;
my $rs = $self->_result->itemtype;
return unless $rs;
return Koha::ItemTypes->_new_from_dbic($rs);
}
=head3 clone
Clone a circulation rule to another branch
=cut
sub clone {
my ($self, $to_branch) = @_;
my $cloned_rule = $self->unblessed;
$cloned_rule->{branchcode} = $to_branch;
delete $cloned_rule->{id};
return Koha::CirculationRule->new( $cloned_rule )->store;
}
=head3 _type
=cut
sub _type {
return 'CirculationRule';
}
1;