1 package Koha::Patron::Attribute;
3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
21 use Koha::Exceptions::Patron::Attribute;
22 use Koha::Patron::Attribute::Types;
23 use Koha::AuthorisedValues;
25 use base qw(Koha::Object);
29 Koha::Patron::Attribute - Koha Patron Attribute Object class
39 my $attribute = Koha::Patron::Attribute->new({ code => 'a_code', ... });
40 try { $attribute->store }
41 catch { handle_exception };
49 my $type = $self->type;
51 Koha::Exceptions::Patron::Attribute::InvalidType->throw( type => $self->code )
54 Koha::Exceptions::Patron::Attribute::NonRepeatable->throw( attribute => $self )
55 unless $self->repeatable_ok($type);
57 Koha::Exceptions::Patron::Attribute::UniqueIDConstraint->throw( attribute => $self )
58 unless $self->unique_ok($type);
60 return $self->SUPER::store();
65 my $attribute_type = $attribute->type;
67 Returns a C<Koha::Patron::Attribute::Type> object corresponding to the current patron attribute
75 return scalar Koha::Patron::Attribute::Types->find( $self->code );
78 =head3 authorised_value
80 my $authorised_value = $attribute->authorised_value;
82 Return the Koha::AuthorisedValue object of this attribute when one is attached.
84 Return undef if this attribute is not attached to an authorised value
88 sub authorised_value {
91 return unless $self->type->authorised_value_category;
93 my $av = Koha::AuthorisedValues->search(
95 category => $self->type->authorised_value_category,
96 authorised_value => $self->attribute,
99 return unless $av->count; # Data inconsistency
105 my $description = $patron_attribute->description;
107 Return the value of this attribute or the description of the authorised value (when attached).
109 This method must be called when the authorised value's description must be
110 displayed instead of the code.
116 if ( $self->type->authorised_value_category ) {
117 my $av = $self->authorised_value;
118 return $av ? $av->lib : "";
120 return $self->attribute;
123 =head3 to_api_mapping
125 This method returns the mapping for representing a Koha::Patron::Attribute object
132 id => 'extended_attribute_id',
133 attribute => 'value',
134 borrowernumber => undef,
141 Checks if the attribute type is repeatable and returns a boolean representing
142 whether storing the current object state would break the repeatable constraint.
148 my ( $self, $type ) = @_;
151 if ( !$type->repeatable ) {
153 borrowernumber => $self->borrowernumber,
157 $params->{id} = { '!=' => $self->id }
158 if $self->in_storage;
160 $ok = 0 if Koha::Patron::Attributes->search($params)->count > 0;
168 Checks if the attribute type is marked as unique and returns a boolean representing
169 whether storing the current object state would break the unique constraint.
175 my ( $self, $type ) = @_;
178 if ( $type->unique_id ) {
179 my $params = { code => $self->code, attribute => $self->attribute };
181 $params->{borrowernumber} = { '!=' => $self->borrowernumber } if $self->borrowernumber;
182 $params->{id} = { '!=' => $self->id } if $self->in_storage;
184 my $unique_count = Koha::Patron::Attributes
188 $ok = 0 if $unique_count > 0;
194 =head2 Internal methods
201 return 'BorrowerAttribute';