Bug 10363: There is no package for authorised values.

Test Plan:
1) Apply this patch
2) run updatedatabase.pl
3) prove t/db_dependent/AuthorisedValues.t

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Kyle Hall 2014-10-23 10:46:47 -04:00 committed by Tomas Cohen Arazi
parent 1b5a3a0267
commit 12c8242755
5 changed files with 360 additions and 21 deletions

178
Koha/AuthorisedValue.pm Normal file
View file

@ -0,0 +1,178 @@
package Koha::AuthorisedValue;
# Copyright ByWater Solutions 2014
#
# 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 base qw(Koha::Object);
=head1 NAME
Koha::AuthorisedValue - Koha Authorised Value Object class
=head1 API
=head2 Class Methods
=cut
=head3 branch_limitations
my $limitations = $av->branch_limitations();
$av->branch_limitations( \@branchcodes );
=cut
sub branch_limitations {
my ( $self, $branchcodes ) = @_;
if ($branchcodes) {
return $self->replace_branch_limitations($branchcodes);
}
else {
return $self->get_branch_limitations();
}
}
=head3 get_branch_limitations
my $limitations = $av->get_branch_limitations();
=cut
sub get_branch_limitations {
my ($self) = @_;
my @branchcodes =
$self->_avb_resultset->search( { av_id => $self->id() } )
->get_column('branchcode')->all();
return \@branchcodes;
}
=head3 add_branch_limitation
$av->add_branch_limitation( $branchcode );
=cut
sub add_branch_limitation {
my ( $self, $branchcode ) = @_;
croak("No branchcode passed in!") unless $branchcode;
my $limitation = $self->_avb_resultset->update_or_create(
{ av_id => $self->id(), branchcode => $branchcode } );
return $limitation ? 1 : undef;
}
=head3 add_branch_limitation
$av->del_branch_limitation( $branchcode );
=cut
sub del_branch_limitation {
my ( $self, $branchcode ) = @_;
croak("No branchcode passed in!") unless $branchcode;
my $limitation =
$self->_avb_resultset->find(
{ av_id => $self->id(), branchcode => $branchcode } );
unless ($limitation) {
my $id = $self->id();
carp(
"No branch limit for branch $branchcode found for av_id $id to delete!"
);
return;
}
return $limitation->delete();
}
=head3 replace_branch_limitations
$av->replace_branch_limitations( \@branchcodes );
=cut
sub replace_branch_limitations {
my ( $self, $branchcodes ) = @_;
$self->_avb_resultset->search( { av_id => $self->id() } )->delete();
my @return_values =
map { $self->add_branch_limitation($_) } @$branchcodes;
return \@return_values;
}
=head3 lib_opac
my $description = $av->lib_opac();
$av->lib_opac( $description );
=cut
sub opac_description {
my ( $self, $value ) = @_;
return $self->lib_opac() || $self->lib();
}
=head3 Koha::Objects->_resultset
Returns the internal resultset or creates it if undefined
=cut
sub _avb_resultset {
my ($self) = @_;
$self->{_avb_resultset} ||=
Koha::Database->new()->schema()->resultset('AuthorisedValuesBranch');
$self->{_avb_resultset};
}
=head3 type
=cut
sub type {
return 'AuthorisedValue';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
## Please see file perltidy.ERR

88
Koha/AuthorisedValues.pm Normal file
View file

@ -0,0 +1,88 @@
package Koha::AuthorisedValues;
# Copyright ByWater Solutions 2014
#
# 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::Borrower;
use base qw(Koha::Objects);
=head1 NAME
Koha::Borrower - Koha Borrower Object class
=head1 API
=head2 Class Methods
=cut
=head3 Koha::AuthorisedValues->search();
my @objects = Koha::AuthorisedValues->search($params);
=cut
sub search {
my ( $self, $params ) = @_;
carp("No branchcode passed in for authorised values search!")
unless $params->{branchcode};
my $branchcode = $params->{branchcode};
delete( $params->{branchcode} );
my $rs = $self->_resultset()->search(
{
%$params,
-or => [
'authorised_values_branches.branchcode' => undef,
'authorised_values_branches.branchcode' => $branchcode,
],
},
{ join => 'authorised_values_branches' }
);
my $class = ref($self);
return wantarray ? $self->_wrap( $rs->all() ) : $class->new_from_dbic($rs);
}
=head3 type
=cut
sub type {
return 'AuthorisedValue';
}
sub object_class {
return 'Koha::AuthorisedValue';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;

View file

@ -98,8 +98,8 @@ If the object is new, it will be created.
If the object previously existed, it will be updated.
Returns:
1 if the store was a success
0 if the store failed
$self if the store was a success
undef if the store failed
=cut

View file

@ -27,22 +27,22 @@ __PACKAGE__->table("authorised_values_branches");
data_type: 'integer'
is_foreign_key: 1
is_nullable: 1
is_nullable: 0
=head2 branchcode
data_type: 'varchar'
is_foreign_key: 1
is_nullable: 1
is_nullable: 0
size: 10
=cut
__PACKAGE__->add_columns(
"av_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 1 },
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
"branchcode",
{ data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 10 },
{ data_type => "varchar", is_foreign_key => 1, is_nullable => 0, size => 10 },
);
=head1 RELATIONS
@ -59,12 +59,7 @@ __PACKAGE__->belongs_to(
"av",
"Koha::Schema::Result::AuthorisedValue",
{ id => "av_id" },
{
is_deferrable => 1,
join_type => "LEFT",
on_delete => "CASCADE",
on_update => "RESTRICT",
},
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" },
);
=head2 branchcode
@ -79,18 +74,13 @@ __PACKAGE__->belongs_to(
"branchcode",
"Koha::Schema::Result::Branch",
{ branchcode => "branchcode" },
{
is_deferrable => 1,
join_type => "LEFT",
on_delete => "CASCADE",
on_update => "RESTRICT",
},
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" },
);
# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-07-11 09:26:55
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:FlVw5Eu4bXF2ygD0QkwwCg
# Created by DBIx::Class::Schema::Loader v0.07040 @ 2014-10-23 10:48:27
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cjPAyQSK7F7sEkiWjCUE7Q
__PACKAGE__->set_primary_key(__PACKAGE__->columns);
# You can replace this text with custom content, and it will be preserved on regeneration
1;

View file

@ -0,0 +1,83 @@
#!/usr/bin/perl
use Modern::Perl;
use Test::More; # tests => 25;
use C4::Context;
use Koha::AuthorisedValue;
use Koha::AuthorisedValues;
my $dbh = C4::Context->dbh;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
$dbh->do("DELETE FROM authorised_values");
# insert
my $av1 = Koha::AuthorisedValue->new(
{
category => 'av_for_testing',
authorised_value => 'value 1',
lib => 'display value 1',
lib_opac => 'opac display value 1',
imageurl => 'image1.png',
}
)->store();
my $av2 = Koha::AuthorisedValue->new(
{
category => 'av_for_testing',
authorised_value => 'value 2',
lib => 'display value 2',
lib_opac => 'opac display value 2',
imageurl => 'image2.png',
}
)->store();
my $av3 = Koha::AuthorisedValue->new(
{
category => 'av_for_testing',
authorised_value => 'value 3',
lib => 'display value 3',
lib_opac => 'opac display value 3',
imageurl => 'image2.png',
}
)->store();
ok( $av1->id(), 'AV 1 is inserted' );
ok( $av2->id(), 'AV 2 is inserted' );
ok( $av3->id(), 'AV 3 is inserted' );
is( $av3->opac_description, 'opac display value 3', 'Got correction opac description if lib_opac is set' );
$av3->lib_opac('');
is( $av3->opac_description, 'display value 3', 'Got correction opac description if lib_opac is *not* set' );
my @authorised_values =
Koha::AuthorisedValues->new()->search( { category => 'av_for_testing' } );
is( @authorised_values, 3, "Get correct number of values" );
my $branches_rs = Koha::Database->new()->schema()->resultset('Branch')->search();
my $branch1 = $branches_rs->next();
my $branchcode1 = $branch1->branchcode();
my $branch2 = $branches_rs->next();
my $branchcode2 = $branch2->branchcode();
$av1->add_branch_limitation( $branchcode1 );
@authorised_values = Koha::AuthorisedValues->new()->search( { category => 'av_for_testing', branchcode => $branchcode1 } );
is( @authorised_values, 3, "Search including value with a branch limit ( branch can use the limited value ) gives correct number of results" );
@authorised_values = Koha::AuthorisedValues->new()->search( { category => 'av_for_testing', branchcode => $branchcode2 } );
is( @authorised_values, 2, "Search including value with a branch limit ( branch *cannot* use the limited value ) gives correct number of results" );
$av1->del_branch_limitation( $branchcode1 );
@authorised_values = Koha::AuthorisedValues->new()->search( { category => 'av_for_testing', branchcode => $branchcode2 } );
is( @authorised_values, 3, "Branch limitation deleted successfully" );
$av1->add_branch_limitation( $branchcode1 );
$av1->branch_limitations( [ $branchcode1, $branchcode2 ] );
my $limits = $av1->branch_limitations;
is( @$limits, 2, 'branch_limitations functions correctly both as setter and getter' );
done_testing;